【问题标题】:Replacing c# compiler with new Roslyn build用新的 Roslyn 构建替换 c# 编译器
【发布时间】:2017-06-24 18:35:48
【问题描述】:

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

替换 CSC、VBCSCompiler、DLL 和配置文件会导致 csc.exe 在任何构建中引发错误。它抱怨清单指定了CodeAnalysis.CSharp DLL 的不同版本。它没有给出文件的路径,甚至没有给出名称。我已经用新版本替换了上述文件夹中的配置和 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]

不过,它在 VS 中构建得很好。

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

【问题讨论】:

  • 你在做什么听起来有点脏。
  • @MathiasLykkegaardLorenzen 当然可以。我的团队喜欢恶作剧,让他们难以逆转。这就是为什么我不热衷于仅仅修改构建参数以使用新的编译器。
  • 您尝试实现的目标听起来很有趣,但请告诉我们您的目标是什么。您是否尝试替换 Visual Studio 安装的 csc.exe?这样当您在 Visual Studio 中编译时,会使用更新后的 csc,exe 吗?
  • @AedvaldTseh 我的目标是替换 MSBuild 在 TFS 构建代理上使用的 csc 和 VBCSCompiler 可执行文件。因此,只要将构建转移到代理并调用 MSBuild,就应该使用我的编译器。
  • 您是否考虑过使用nuget.org/packages/Microsoft.Net.Compilers 来完成这项工作?

标签: c# roslyn csc


【解决方案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 构建工具。

当心 - 如果您构建和使用未发布的代码,即使在安装步骤中也会出现错误

【讨论】:

    猜你喜欢
    • 2018-12-06
    • 1970-01-01
    • 2013-07-11
    • 2016-06-19
    • 2021-11-08
    • 2015-06-19
    • 1970-01-01
    • 2013-03-07
    • 2019-06-25
    相关资源
    最近更新 更多