Roslyn:如何判断编译中是否引用了特定的程序集?

时间:2017-08-14 03:12:06

标签: c# .net roslyn

我正在写一个Roslyn诊断分析仪。我想在注册任何其他操作之前判断System.Collections.Immutable中是否引用了RegisterCompilationStartAction。这是我到目前为止的方式:

context.RegisterCompilationStartAction(compilationStartContext =>
{
    var compilation = compilationStartContext.Compilation;
    if (compilation.GetTypeByMetadataName("System.Collections.Immutable.ImmutableArray`1") == null)
    {
        return;
    }

    ...
});

这有效,但我觉得这不是最干净的方法。我可以以某种方式获得与程序集名称对应的MetadataReference,并检查它是否为空,如GetMetadataReference("System.Collections.Immutable") == null? (GetMetadataReference不接受字符串,因此实际上不起作用。)如果没有,任何其他更简洁的方法来执行此操作不涉及挑选特定类型?感谢。

1 个答案:

答案 0 :(得分:0)

您可以直接搜索引用并解析MetadataReference以检查项目中是否包含特定程序集,而不是搜索类型:

' select all using ctrl a
SendKeys "^a", True
' wait 2 secs
Application.Wait Now + TimeValue("00:00:2")
' copy all using ctrl c
SendKeys "^c"
' wait 2 secs
Application.Wait Now + TimeValue("00:00:2")
' activate this wokbook
Windows("PdfToExcel.xlsb").Activate
Range("a2").Select
ActiveSheet.Paste