gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:32:50 24 4
gpt4 key购买 nike

我正在编写 Roslyn 诊断分析器。在我注册任何其他操作之前,我想知道 System.Collections.Immutable 是否在 RegisterCompilationStartAction 中被引用。到目前为止,这是我的处理方式:

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

...
});

这行得通,但我认为这不是最简洁的方法。我能否以某种方式获取与程序集名称对应的 MetadataReference 并检查它是否为 null,例如 GetMetadataReference("System.Collections.Immutable") == null? (GetMetadataReference 不接受字符串,因此实际上行不通。)如果不行,还有其他不涉及挑选特定类型的更简洁的方法吗?谢谢。

最佳答案

无需搜索类型,您可以简单地搜索引用并解析元数据引用以检查特定程序集是否包含在项目中:

if(!compilation.References.Any(reference => 
compilation.GetAssemblyOrModuleSymbol(reference)
.Name == "System.Collections.Immutable"))
{
return;
}

关于c# - Roslyn:如何判断编译中是否引用了特定程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45666935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com