.net-core - .NET Core的新.csproj格式的Roslyn工作区

标签 .net-core roslyn

我一直在研究使用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/

相关文章:

visual-studio - Roslyn 是否与 ReSharper 冲突?

.net-core - 设置 IOCP 线程计数 int .NET Core

iis - 您可以在 IIS 中托管 ServiceStack Web 应用程序吗?

c# - 没有 setter 的 Entity Framework 核心属性

c# - C#中多维数组的源码是如何生成的

c# - 从 Visual Studio 文本选择(插入符号位置)获取 Roslyn SyntaxToken

c# - 罗斯林 If 语句

c# - Start.Process 不在单独的进程中运行脚本

authentication - ASP.NET Core 3.1 - AddJwtBearer、OnTokenValidated 事件在失败时不考虑自定义消息

c# - 如何在 CompilationUnit 中找到方法符号的 SyntaxNode?