在 Roslyn Analyzer/Source 生成器中,有什么方法可以区分直接和传递程序集引用

In a Roslyn Analyzer/Source Generator, is there any way to distinguish between direct and transitive assembly references

AIUI,传递引用是 MSBuild 而不是 Roslyn 功能,并且与 Package/ProjectReferences 而不是程序集引用有关。我相信编译器只是获得了一组提供给它的程序集引用,而没有关于它们来自何处的信息。因此,我看不到任何方法来区分分析器或源生成器中的直接引用和传递引用(即给定一个 CodeAnalysis.Compilation 对象)。 Compilation.References 包括可传递的,Compilation.ReferencedAssemblyNames.

也是如此

有人知道获取此信息的方法吗?是否有可能获得一个 MsBuild 项目对象,从中可以收集到它?

无法获取此信息;正如您观察到的 MSBuild 正在执行此操作,当 Roslyn 获取信息时,它只是一个简单的列表。由于各种技术原因,我们无法返回到 MSBuild 实例。如果您阐明了为什么需要这个,我们可能会为后续步骤提供一些建议。