错误CS1056:在tfs持续集成过程中运行msbuild的意外字符'$'

Hei*_*ich 29 c# tfs .net-framework-version c#-5.0 c#-6.0

我有一个框架所针对的项目.NET Framework 4.6.1,作为tfs上持续集成过程的一部分,我们创建了一个Build Solution任务,以确保代码正确编译.
现在TFS服务器有最新版本的.Net Famework 4.6.2.在寄存器中,这是框架的Release键的值

在所有其他操作系统版本上:394806 => .NET Framework 4.6.2

但是当构建运行时,它会出现此错误:

Error CS1056: Unexpected character '$'
Run Code Online (Sandbox Code Playgroud)

我不想用字符串插值替换string.Format来解决这个问题,请提供另一种解决方法来解决它.

我是否需要在TFS服务器上安装其他东西?

Zin*_*nov 23

可以修复安装Nuget包Microsoft.Net.Compilers的问题.下面是我突出显示的答案的链接:Project使用Visual Studio构建良好但从命令行失败

该功能是C#6的语法糖,尝试安装最新版本的框架4.6.2 https://www.microsoft.com/en-us/download/details.aspx?id=53345

然后转到Project属性并更改Target框架上的Application选项以指向最新的.您无需更改代码即可使用string.Format方法替换字符串插值以进行修复.如果您仍然收到此错误,是因为,运行您的构建的编译器不是C#的最新版本,请尝试从Nuget添加Microsoft.Net.Compilers并再次编译,这应解决该问题.如果你想避免安装这个软件包,请尝试打开.csproj并查看ToolsVersion.that应指向版本12,然后将其更改为14,但请确保已安装最新版本的MSBuild来自 https://www.microsoft.com/en-us/download/details.aspx?id=48159或转到C:\ Program Files(x86)\ MSBuild\14.0\Bin,你应该有这个文件夹csc.exe编译器.如果即使这样也无法解决问题,请尝试按照以下步骤操作 :https://msdn.microsoft.com/en-us/library/bb383985.aspx.

根据我的经验,我用3种不同的方式解决了这个问题:

1-刚刚从Nuget获得包裹

2-在tfs服务器上安装Microsoft Build Tools 2015

3-大锤和最后一个选项,但对我来说最好,因为你不需要处理对nuget的依赖,是在运行该进程的tfs服务器上安装visual studio版本.

希望这可以帮助


VMA*_*Atm 12

安装后MS构建工具2015年%ProgramFiles%\MSBuild\14.0\bin需要覆盖的MSBuild版本构建服务器与新值(14.0).

您应该阅读MSDN文章(或此答案),但TL; DR您的选项是:

从最高到最低的优先顺序用于确定ToolsVersion:

  1. 用于构建项目ToolsVersionMSBuild任务的属性(如果有).
  2. 命令中使用的/toolsversion(或/tv)开关(msbuild.exe如果有).
  3. 如果MSBUILDTREATALLTOOLSVERSIONSASCURRENT设置了环境变量,则使用当前值ToolsVersion.
  4. 如果MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT设置了环境变量并且ToolsVersion项目文件中定义的值大于当前值ToolsVersion,请使用当前值ToolsVersion.
  5. 如果MSBUILDLEGACYDEFAULTTOOLSVERSION设置了环境变量,或者ToolsVersion未设置环境变量,则使用以下步骤:
    • 项目文件元素的ToolsVersion属性Project.如果此属性不存在,则假定它是当前版本.
    • 文件中的默认工具版本MSBuild.exe.config.
    • 注册表中的默认工具版本.有关更多信息,请参阅标准和自定义工具集配置.
  6. 如果MSBUILDLEGACYDEFAULTTOOLSVERSION未设置环境变量,则使用以下步骤:
    • 如果环境变量MSBUILDDEFAULTTOOLSVERSION设置为ToolsVersion存在,请使用它.
    • 如果DefaultOverrideToolsVersion设置MSBuild.exe.config,请使用它.
    • 如果DefaultOverrideToolsVersion在注册表中设置,请使用它.
    • 否则,请使用当前ToolsVersion.

  • 我尝试了所有这些更改,即使我将寄存器上的值更改为将默认版本更改为 14.0,我也更改了 MSBuild.exe.config 但一切都没有成功。我的项目有正确的 ToolsVersion (2认同)
  • @Heinrich你还需要确保你从"C:\ Program Files(x86)\ Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin \"运行msbuild.exe(而不是从C:\ Windows\Microsoft.NET \框架\ v4.0.30319 \) (2认同)

Cha*_*esS 7

您可能正在构建错误的MSbuild.exe; 在Visual Studio中进行编译(它工作的地方)并检查输出中的日志.应该有类似的东西:

1>Target "GetReferenceAssemblyPaths" in file "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets" 
Run Code Online (Sandbox Code Playgroud)

在我的情况下,确保您在Bin目录中使用MSBuild.exe;

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSbuild.exe
Run Code Online (Sandbox Code Playgroud)


Mik*_*ynn 5

Microsoft.Net.Compilers 不起作用,但从Nuget安装DotNetCompilerPlatform起作用了。