Dot-Net-Core
.NET Core 的新 .csproj 格式的 Roslyn 工作區
我一直在開發一個 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();同一個庫也將允許您引用解決方案文件。