如何知道是否在解决方案中声明了符号
本文关键字:声明 符号 解决方案 何知道 是否 | 更新日期: 2023-09-27 18:06:27
在Roslyn DiagnosticAnalyzer
中分析c#源代码时,我有一个ITypeSymbol
。如何确定此类型是在源代码中声明还是仅通过程序集引用引用?
我目前的解决方案是检查符号是否有任何DeclaringSyntaxReferences
。这在Visual Studio中非常有效。然而,当我在MsBuild执行中进行分析时,我的结果并不准确。问题是MsBuild一个接一个地构建每个项目,所以如果类型符号在另一个项目中声明,那么DeclaringSyntaxReferences
将为空。
是否有办法区分"项目引用"answers"程序集引用"?
希望这个方法有帮助:
private bool GetSource(ISymbol symbol, out string filePath)
{
var baseLocation = symbol.Locations.FirstOrDefault();
filePath = "SPECIFY CURRENT SYNTAX TREE FILE PATH";
if (baseLocation == null)
return false;
var baseLocationPath = baseLocation.ToString();
if (baseLocationPath.Contains("SourceFile("))
{
baseLocationPath = baseLocation.ToString().Replace("SourceFile(", "");
filePath = baseLocationPath.Substring(0, baseLocationPath.LastIndexOf("[", StringComparison.Ordinal));
}
else if (baseLocationPath.Contains("MetadataFile("))
{
baseLocationPath = baseLocation.ToString().Replace("MetadataFile(", "");
filePath = baseLocationPath.Substring(0, baseLocationPath.LastIndexOf(".dll", StringComparison.Ordinal) + 4);
}
return baseLocation.IsInSource;
}