我正在编写一个Roslyn诊断分析器,我想在注册任何其他操作之前通过
RegisterCompilationStartAction
检测是否引用了System.Collections.Immutable
。目前我的方法如下:context.RegisterCompilationStartAction(compilationStartContext =>
{
var compilation = compilationStartContext.Compilation;
if (compilation.GetTypeByMetadataName("System.Collections.Immutable.ImmutableArray`1") == null)
{
return;
}
...
});
这个方法是可行的,但我觉得并不是最干净的方式。我是否可以以程序集名称为参数获取对应的MetadataReference
对象,并检查它是否为空,就像GetMetadataReference("System.Collections.Immutable") == null
一样?(因为GetMetadataReference
方法不接受字符串参数,所以实际上这并不起作用。)如果不行,是否还有其他更干净的方法可以完成而不涉及特定类型的选择?谢谢。