【问题标题】:String Interpolation will not build on TeamCity字符串插值不会基于 TeamCity
【发布时间】:2015-12-18 21:32:30
【问题描述】:

对于我支持的一个旧项目,我一直在进行一些现代化改造。这包括各种事情:将 .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 已安装在 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...是吗?

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

我显然错过了所有这些一些东西,我不确定 A)我错过了多少东西,或者 B)我应该对它们做些什么。

【问题讨论】:

    标签: c# .net msbuild teamcity


    【解决方案1】:

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

    当我阅读from here 时,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 的副本,以便针对最新的 C# 版本进行编译,由 VS2015 安装。

    【讨论】:

    • 为了完整起见,您实际上并不需要在每个构建代理上安装 VS2015;如果你有几个,它会变得非常麻烦。只需安装Microsoft Build Tools 2015,TeamCity 就会在代理要求中满足要求。然后,您可以在 MSBuild 步骤中选择 Build Tool 2015(如果您正在使用该工具)。
    • 我们实际上使用了一个 NAnt 脚本,带有我们想要使用的构建器的路径......但是,这是一个很好的建议!谢谢。
    • 运行 VS 2019 的人的更新 - 始终检查您的路径! VS 2019 的安装路径与我大约五年前发布的路径不同(!!!)。
    猜你喜欢
    • 2019-09-16
    • 2012-07-24
    • 2015-10-21
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 2015-10-31
    • 2017-03-15
    • 1970-01-01
    相关资源
    最近更新 更多