用新的Roslyn构建替换c#编译器

0__*_*__0 18 c# csc roslyn

我正在玩Roslyn的一些更改,但不幸的是,即使是未经修改的解决方案也会在我运行时崩溃VisualStudioSetup.Next,并且在尝试加载MS程序集时出错.所以我做了一些简单的更改,用新版本替换了我机器的现有二进制文件和配置文件.改变了C:/Program Files (x86)/MSBuild/bin and Windows/Microsoft.NET/Framework64.

替换CSC,VBCSCompiler,DLL和配置文件会导致csc.exe在任何构建上抛出错误.它抱怨清单指定了不同版本的CodeAnalysis.CSharpDLL.它没有为文件甚至名称提供路径.我用新版本替换了上述文件夹中的配置和DLL.我需要实际替换哪些文件才能正常工作?

我搜索了所有CSC实例的整个驱动器,并确保所有配置指定DLL的新版本,所以我不知道现在在哪里查看.

我知道可以将参数传递给MSBuild或者向csproj文件添加一个部分来指定编译器二进制文件的目录,但是我想获得胜利.

编辑:所以我决定只更改我的版本的版本号.通过VS中的程序集属性执行此操作会导致构建失败.我尝试使用MSBuild,但在每个项目中都出现此错误:

"F:\Git\Repos\roslyn\src\Compilers\CSharp\csc\csc.csproj" (default target) (1) ->

F:\Git\Repos\roslyn\build\Targets\Versions.props(42,5): 

error MSB4184: The expression ""1".Substring(3)" cannot be evaluated. 

startIndex cannot be larger than length of string. 

Parameter name: startIndex F:\Git\Repos\roslyn\src\Compilers\CSharp\csc\csc.csproj]
Run Code Online (Sandbox Code Playgroud)

它尽管从VS建立起来很好.

MSBuild参数: /p:OfficialBuild=true /p:BuildNumber=1.3.1.60616 /p:Configuration=Release

Jac*_*ski 1

目前至少需要替换 Visual Studio 2017 实验实例中的编译器。所需版本为 v15.3 或更高版本。而且是必须安装Roslyn.Compilers.Extension.vsix而不是安装VisualStudioSetup.Next。

DotNet Roslyn github repo文档的确切信息如下:

CompilerExtension:该项目可以在解决方案资源管理器的 Compilers 文件夹中找到,并构建Roslyn.Compilers.Extension.vsix. 这会部署用于在 IDE 中进行实际构建的命令行编译器的副本。它仅影响从安装的 Visual Studio 实验实例触发的构建,因此不会影响您的常规构建。请注意,如果您只安装这个,IDE 将不会知道您的构建中包含的任何语言功能。如果您经常研究新的语言功能,您可能希望考虑构建 CompilerExtension 和 VisualStudioSetup 项目,以确保真正的构建和实时分析同步。

描述VisualStudioSetup.Next清楚地说明了它的局限性和预期用途,即修复 IDE 错误:

VisualStudioSetup.Next:可以在解决方案资源管理器的 VisualStudio 文件夹中找到此项目,并构建 Roslyn.VisualStudio.Setup.vsix。理论上,它包含点亮下一版本 VS (Dev16) 功能的代码,但自 Dev15/VS2017 发布以来目前尚未更新。如果您正在修复 IDE 错误,那么这就是您想要使用的项目。

如果计划替换 Visual Studio 2017 默认实例中的 Roslyn 编译器,请执行以下操作:

  1. 关闭 Visual Studio 2017 的所有实例。
  2. 双击Roslyn.Compilers.Extension.vsix软件包并提升安装扩展后。这次它应该在默认实例中可用。

上述步骤也可以应用于 Visual Studio Build Tools。

请注意 - 如果您构建并使用未发布的代码,那么即使在安装步骤中它也会出现错误。