【发布时间】:2020-10-31 16:00:04
【问题描述】:
我正在尝试通过此代码创建的 Roslyn 编译中的某些标准获取所有类型:
var syntaxTrees = new[]
{
CSharpSyntaxTree.ParseText(source, new CSharpParseOptions(LanguageVersion.Preview))
};
// Add some references
references.Add(MetadataReference.CreateFromFile(...));
// Create compilation
var options = new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary);
var compilation = CSharpCompilation.Create(nameof(GeneratorRunner), syntaxTrees, references, options);
return compilation;
然后我使用此代码来搜索类型
compilation.GetTypeByMetadataName("HomeCenter.Messages.Commands.Device.AdjustPowerLevelCommand");
compilation.GetSymbolsWithName(x => true, SymbolFilter.Type).ToList();
这对我来说很奇怪 - GetSymbolsWithName 只返回在我的源中定义的类型,而不是在引用的程序集中,但 GetTypeByMetadataName 能够返回有关类型的信息,即使它是在引用程序集中定义的。问题是我正在尝试搜索编译中的所有类型,所以我不知道确切的名称。问题是如何在应用程序的所有类型中搜索源代码以及引用的程序集?还有没有其他选项用于过滤与名称相反的过滤 - 我对从特定类型继承的所有类型感兴趣,因此它们可以以各种方式命名。
【问题讨论】: