nuget - 在 TeamCity 中使用特定的 Roslyn 编译器版本

标签 nuget teamcity roslyn

由于 Roslyn 编译器中的错误,我无法使用编译器的 v1.0 构建我的项目(没有使其在 1.0 上运行的解决方法)。但是,Microsoft 已在更新版本的编译器中纠正了该问题。

使用 Visual Studio 时,您可以通过添加来自 https://www.nuget.org/packages/Microsoft.Net.Compilers/ 的 NuGet 包来使用特定版本的编译器到你的项目。这会导致 Visual Studio 在构建项目时使用指定版本的编译器。

但是,当尝试在 TeamCity 上运行构建时,它似乎不知道要使用新版本的编译器。它只允许一个人选择使用哪个版本的 Visual Studio。有什么方法可以指定 TeamCity 手动使用哪个版本的编译器?

注意:我使用的是 TeamCity Professional 9.1.3(内部版本 37176),在构建步骤中我选择了 Visual Studio 2015。

在本地构建时,构建是使用:

D:\BitBucket\LocalPackages\Microsoft.Net.Compilers.1.1.0-beta1-20150928-02\build\..\tools\csc.exe /noconfig /nowarn:1701,1702,2008 ....

但是在 TeamCity 上构建时,日志显示:

[Csc] C:\Program Files (x86)\MSBuild\14.0\bin\csc.exe /noconfig /nowarn:1701,1702 .....

我还确认该包已作为 TeamCity 构建的一部分安装(在 csc 命令之前):

[Exec] Installing 'Microsoft.Net.Compilers 1.1.0-beta1-20150928-02'.

这是否只是 NuGet 在 Visual Studio UI 和命令行中的行为方式不同的一个症状?如果是这样,是否有解决方法?

更新: 我从来没有弄清楚。在构建服务器上的 Visual Studio 中运行构建工作完美,但通过 TeamCity 使用完全相同的文件运行构建不起作用。

但是,Microsoft 发布了 VS2015 Update 1,它解决了我原来的问题,但不是这个特定问题。

最佳答案

Microsoft.Net.Compilers包使用标准的 Nuget 工具。具体来说,有一个 build包中的文件夹,其中包含一个 props 文件。这个 props 文件被注入(inject)到 csproj 文件中,并负责将 csc 可执行文件更改为包中的文件。

如果您使用的是 msbuild 14,则 .props 文件会更改 CscToolPath 和 CscToolExe 以指向包中的 csc.exe。因此,您只需确保 TeamCity 使用的是 msbuild 14。

您使用的是哪个版本的 TeamCity? 9.1 的文档说它支持 msbuild 14 (msbuild 2015)。如果您使用的是旧版本,您仍然可以从命令行运行程序使用 msbuild 14。

关于nuget - 在 TeamCity 中使用特定的 Roslyn 编译器版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33536189/

相关文章:

nuget - VSTS 构建定义 : adding multiple feeds in Nuget restore task

c# - 有没有办法为每个项目进行 NuGet 包源设置?

ant - Teamcity ant 构建类路径 - 如何添加额外的 jar

configuration - 如何获取TeamCity中项目依赖的checkout目录?

c# - 将 .exe 打包成 .vsix 并从 Visual Studio 扩展中调用

c# - 如何编写引用 dotnet 标准 2.0 项目的 roslyn 分析器

c++ - 我应该/可以/必须如何处理我的 C++ 项目所依赖的 dll?

.net - 移动项目时 Visual Studio Nuget 程序集引用损坏

git - TeamCity 到 GitHub 连接错误 : session is down

msbuild - SonarQube 具有基于 Roslyn 的自定义规则