字符串插值不会建立在TeamCity上

本文关键字:TeamCity 建立 插值 字符串 | 更新日期: 2023-09-27 18:27:31

对于我支持的一个旧项目,我一直在进行一些现代化。其中包括各种内容:将.NET Framework升级到4.6,以及其他升级。我们有一些余地做的一件事是进行语法升级,前提是我们不改变业务逻辑。

我们最近还安装了Visual Studio 2015和最新、最棒的ReSharper,它揭示了"字符串插值"现在是我们可以在代码中做的事情。对于那些不知道的人来说,字符串插值是string.Format调用的语法糖,如下所示:

// Normal, pre-C#6 formatting:
var foo = string.Format("Some string {0}", bar);
// C#6 String Interpolation
var foo = $"Some string {bar}";

这真的很有用,因为它使消息更容易阅读,而且通常占用更少的字符。

然而,TeamCity似乎不同意。当我在提交中向上推代码时,我得到了以下错误:

Directory'SomeFile.cs: error CS1056: Unexpected character '$' [C:'ProjectDirectory'Project.Core'Project.Core.csproj]

从表面上看,这似乎是某种C#之前的构建器受到了打击,因为这是C#的一个新功能。

以下是我观察到的,这就是为什么我认为这就是正在发生的事情:

  1. 生成配置指向C:'Windows'Microsoft.NET'Framework'v4.0.30319'MSBuild.exe这让我停顿了一下,因为我们的生成代理上大概安装了.NET 4.6。

  2. 但是,在尝试从Microsoft安装程序直接安装.NET 4.6时,由于.NET 4.6已经安装在bulid代理上,因此失败了。

  3. 我们的构建配置的编译步骤也让我停顿了一下。注意到构建引擎和框架版本的前两行分别是[exec] Microsoft (R) Build Engine version 4.6.1055.0 [exec] [Microsoft .NET Framework, version 4.0.30319.42000]。构建引擎显然是v4.6,但.NET框架是4.0!?我读对了吗?

  4. 最后,构建日志的最后一行:[NAnt output] External Program Failed: C:'WINDOWS'Microsoft.NET'Framework'v4.0.30319'MSBuild.exe (return code was 1)这是而不是4.6…是吗?

问题:Twofold。第一个问题可能很愚蠢,但我真的是针对.NET 4.6编译的吗其次,如果我指向.NET 4.6,我可以用什么方式在C#6中实际构建字符串插值语法?

我显然错过了这一切,我不确定A)我错过了多少东西,或者B)我到底该怎么办。

字符串插值不会建立在TeamCity上

我觉得自己是清白的;有趣的路径/版本实际上表明了真正的问题:正在运行的MSBuild.exe不是VS2015安装的。

正如我从这里读到的,C:'Windows'Microsoft.NET'Framework'v4.0.30319中的MSBuild.exe版本实际上是C#6之前的版本;出于某种原因,安装Visual Studio 2015不会更改安装!

相反,您应该将MSBuild.exe调用指向存储在C:'Program Files (x86)'MSBuild'14.0'Bin中的副本,以便根据VS2015安装的最新C#版本进行编译。