如何在Roslyn分析器中获取直接引用的项目?

问题描述 投票:0回答:2

我有一些 C# 项目,在引用它们的项目中应该有一些配置。我想编写一个 Roslyn 分析器(

DiagnosticAnalyzer
)来检查那些直接引用的项目是否已配置。

“直接引用”表示该项目由 .csproj 文件中的

<ProjectReference ...>
引用。

我找到了一个房产,并认为它会有所帮助:

Compilation.ReferencedAssembly

MS 表示它将获得所有“此编译引用的所有程序集的程序集身份直接。”

但它给了我所有引用的项目,包括直接的和传递的。

我用错了吗?

c# roslyn roslyn-code-analysis
2个回答
3
投票

分析器无法查看所引用的项目——编译器最终只能看到从其他项目输入的 DLL。


0
投票

正如@Jason所说,编译器根本不知道项目的概念。它只是传递了 dll 引用。您可以获取构建的二进制日志并查看调用编译器的

Csc
任务。

传递给编译器的 dll 集合是由 MSBuild 魔法计算出来的。

如果您从未抓取过二进制日志并查看过它,我鼓励您这样做。了解这是一件非常重要的事情,并且对于诊断复杂的构建问题有很大帮助。

一个重要的问题是,为什么要求必须直接存在 ProjectReference?您的案例不满足此要求会导致什么问题?

无论如何,您想要实现的可能不是 DiagnosticAnalyzer 的用例。我认为这更适合 MSBuild 目标。您需要根据您的具体情况弄清楚如何去做。

© www.soinside.com 2019 - 2024. All rights reserved.