我一直在研究使用Roslyn的工作区API加载项目的VS Code扩展,目前该扩展通过project.json
包中的ProjectJsonWorkspace
类型支持.NET Core的旧Microsoft.DotNet.ProjectModel.Workspaces
格式。
随着即将发布的新工具更改,我渴望支持新的.csproj
构建格式,但似乎找不到支持它的.NET Standard兼容工作区。
我的理解是,由于它正在使用MSBuild,因此我将需要使用MSBuild(Microsoft.CodeAnalysis.MSBuild
)程序包,但是目前它不支持.NET Standard。
如果存在,最好的解决方案是什么,还是我必须考虑创建自己的工作区实现?
最佳答案
与各种人交谈后,似乎没有兼容.NET Standard的MS Build工作区,这可以通过下面对following GitHub issue的回答来看出:
我们尚未完成使MSBuildWorkspace与新的MSBuild跨平台正常工作的工作。同时,您可能会看看omnisharp会如何填充其工作空间。
因此,似乎在撰写本文时,如果要在.NET Standard兼容项目中定位MSBuild工作空间,则需要使用Roslyn的工作空间API构建自己的自定义工作空间,这正是OmniSharp的工作方式。
更新(16/10/2017):
尽管MSBuildWorkspace仍不支持.NET Standard,但有一个名为Buildalyzer的库可以跨平台工作,并会为您生成一个AdhocWorkspace,使您可以实现相同的目标。
using Buildalyzer.Workspaces;
// ...
AnalyzerManager manager = new AnalyzerManager();
ProjectAnalyzer analyzer =
manager.GetProject(@"C:\MyCode\MyProject.csproj");
AdhocWorkspace workspace = analyzer.GetWorkspace();
同一库也将允许您引用解决方案文件。
关于.net-core - .NET Core的新.csproj格式的Roslyn工作区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42395336/