使用 Roslyn 从解决方案获取共享项目“.shproj”

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

我有一个解决方案,其中我有一个扩展名为“.shproj”的共享项目

我需要使用Roslyn向项目添加一个类,但是当我查看项目列表时,它不包含共享项目:

const string solutionTargetPath = @"C:\Repo\Solution.sln";

//Roslyn startup
MSBuildLocator.RegisterDefaults();
var workspace = MSBuildWorkspace.Create();
var solution = await workspace.OpenSolutionAsync(solutionTargetPath);
Project projectSilaeClientShared = solution.Projects.First(x => x.Name == "ProjectX.Shared");

我什至无法直接从文件路径获取项目:

string projectFilePath = "C:\Repo\Shared.shproj";

MSBuildLocator.RegisterDefaults();
MSBuildWorkspace workspace = MSBuildWorkspace.Create();
Project project = workspace.OpenProjectAsync(projectFilePath).Result;

错误消息显示:(无法打开项目...因为扩展名“.shproj”未与语言关联)

InnerException {“不可能的项目‘C:\Repo\Shared.shproj’,文件‘.shproj’的扩展名与语言无关。”} System.Exception {System.InvalidOperationException}

如何通过 Roslyn 获取项目并添加修改?

救命!

c# roslyn shared-project
1个回答
0
投票

共享项目不太适合罗斯林的模型。从我们的角度来看,项目不是磁盘上的项目文件,而是更多的“编译器的调用”,因此共享项目的内容(如源文件)是其使用的 .csproj 中的源文件。我们不以任何其他方式代表 .shproj 的特殊性。因此,虽然 Roslyn 绝对可以为您提供有关 .csproj 的信息(可能会消耗该 .shproj),但我们不会为直接理解 .shproj 或编辑它提供任何支持。为此,您可以直接使用 MSBuild API,具体取决于您想要实现的目标。

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