Dot-Net-Core

.NET Core 的新 .csproj 格式的 Roslyn 工作區

  • February 22, 2017

我一直在開發一個 VS Code 擴展,它使用 Roslyn 的工作區 API 來載入項目,目前該擴展通過包中的類型支持 .NET Core 的舊project.json格式。ProjectJsonWorkspace``Microsoft.DotNet.ProjectModel.Workspaces

隨著即將發布的新工具更改,我渴望支持新的.csproj建構格式,但似乎找不到支持它的.NET Standard 兼容工作區。

我的理解是,因為它使用的是 MSBuild,所以我需要使用 MSBuild ( Microsoft.CodeAnalysis.MSBuild) 包,但是它目前不支持 .NET Standard。

如果存在最好的解決方案是什麼,或者我是否必須考慮創建自己的工作區實現?

與不同的人交談後,似乎沒有與 .NET Standard 兼容的 MS Build 工作區,這可以通過以下 GitHub 問題的答案看到:

我們尚未完成使 MSBuildWorkspace 與新的 MSBuild 跨平台正常工作的工作。同時,您可能會查看omnisharp 為填充其工作區所做的工作。

因此,在撰寫本文時,如果您想在符合 .NET Standard 的項目中定位 MSBuild 工作區,那麼您需要使用 Roslyn 的工作區 API 建構自己的自定義工作區,這正是 OmniSharp 的做法。

更新(2017 年 16 月 10 日):

雖然 MSBuildWorkspace 仍然不支持 .NET Standard,但有一個名為Buildalyzer的庫可以跨平台工作,並會為您生成一個 AdhocWorkspace,讓您實現相同的目標。

using Buildalyzer.Workspaces;
// ...

AnalyzerManager manager = new AnalyzerManager();
ProjectAnalyzer analyzer = 
manager.GetProject(@"C:\MyCode\MyProject.csproj");
AdhocWorkspace workspace = analyzer.GetWorkspace();

同一個庫也將允許您引用解決方案文件。

引用自:https://stackoverflow.com/questions/42395336