gpt4 book ai didi

msbuild - 如何使用 roslyn 构建现有解决方案并解析 csproj 中的所有引用,以便我可以解析所有类型

转载 作者:行者123 更新时间:2023-12-02 10:11:38 24 4
gpt4 key购买 nike

我有一个内置的解决方案,当我像这样用 roslyn 加载它时:

var workspace = MSBuildWorkspace.Create();
var solutionPath = @"c:\path\to\my.sln";
var solution = workspace.OpenSolutionAsync(solutionPath).Result;

那么所有项目都有 0 个元数据引用。

如果我尝试从引用的程序集中获取类型,如下所示:

var compilation = solution.Projects.First().GetCompilationAsync().Result;
var myType = compilation.GetTypeByMetadataName("SomeTypeNanme);

它永远找不到类型。如果我像这样手动添加元数据引用:

var project = project.AddMetadataReference(AssemblyContaningTheType);

然后就可以找到类型了。

我的解决方案以 .NET Framework 4.5.2 为目标,以防万一

这是解析引用的唯一方法(即手动添加元数据引用)吗?难道不能通过引用全部在csproj中来完成吗?我如何知道我需要添加哪些引用文献?

理想情况下,我希望自动解析引用,但可以使用从项目文件中的信息构建所有必要的元数据引用的指针...

最佳答案

据我所知,它可能与 this issue 有关,或者也许this one这导致 this open ticket .

引用后者

Empty MetadataReferences for project referencing other project from same solution

Version Used:2.7.0

重现步骤:

  1. 使用两个项目 A 和 B 创建解决方案

  2. 将项目 B 引用到项目 A

  3. 使用以下代码打开项目 A:

    var 工作空间 = MSBuildWorkspace.Create(additionalProperties);

    项目项目=workspace.OpenProjectAsync(projectPath).Result;

预期行为:

project.MetadataReferences should contain project's references, such as mscorlib.dll

实际行为:

project.MetadataReferences is empty.

关于msbuild - 如何使用 roslyn 构建现有解决方案并解析 csproj 中的所有引用,以便我可以解析所有类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55092393/

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