【发布时间】: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 来完成这项工作?