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

标签 c# .net msbuild teamcity

对于我支持的一个旧项目,我一直在进行一些现代化改造。这包括各种事情:将 .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#6 之前的构建器似乎受到了打击,因为这是 C#6 的新功能。

这是我观察到的,这就是为什么我推测这就是正在发生的事情:

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

  2. 尝试从 Microsoft 安装程序直接安装 .NET 4.6 时失败了,因为 .NET 4.6 已经安装在构建代理上。

  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 输出] 外部程序失败:C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe(返回代码是 1)不是 4.6...是吗?

问题:双重的。第一个问题可能很愚蠢,但是我实际上是针对 .NET 4.6 进行编译吗?其次,如果我指向 . NET 4.6?

对于所有这一切,我显然遗漏了一些东西,我不确定 A) 我遗漏了多少东西,或者 B) 我究竟应该如何处理它们。

最佳答案

我感到被证明是正确的;有趣的路径/版本实际上表明了真正的问题:正在运行的 MSBuild.exe 不是 VS2015 安装的。

当我读到from hereC:\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# 版本。

关于c# - 字符串插值不会建立在 TeamCity 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34364251/

相关文章:

c# - Entity Framework 4 覆盖自己的类属性的 Equals 和 GetHashCode

c# - 如何从 C# 代码调用 Google Geocoding 服务

c# - 我们不能在接口(interface)中创建对象,但返回类型如何成为接口(interface)?

c# - ProjectGuid(.csproj),如何正确生成?

msbuild - VS2012 中 VsDevCmd.bat 和 vcvarsall.bat 的区别

c# - 如何让 T4ReferencePath 工作?

c# - 如何使用 FK NHibernate 映射复合 PK

c# - 是否有将 T-SQL 存储过程转换为 C# 的工具?

c# - 如何在编译开始之前、生成中间文件之后运行 MSBuild 任务?

.net - .net 计时器有多可靠?