错误CS1056:在tfs持续集成过程中运行msbuild的意外字符’$’
我有一个框架针对.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 '$'
我不想用string.Format
替换字符串插值来解决这个问题,请提供另一种解决方法来解决它。
我是否需要在TFS服务器上安装其他东西?
可以修复安装Nuget包Microsoft.Net.Compilers的问题。 下面是我突出显示的答案的链接: Project使用Visual Studio构建良好,但是从命令行失败
该function是C#6的语法糖,尝试安装最新版本的框架4.6.2 https://www.microsoft.com/en-us/download/details.aspx?id=53345
然后转到Project属性并更改Target framework上的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版本。
希望这可以帮助
将MS Build工具2015安装到%ProgramFiles%\MSBuild\14.0\bin
您需要使用新值( 14.0
) 覆盖构建服务器的MSBuild版本 。
您应该阅读MSDN文章(或此答案 ),但TL; DR您的选项是:
-
/ToolsVersion
构建项目或解决方案时,使用/ToolsVersion
开关(或简称/tv
)覆盖版本:msbuild.exe someproj.proj /tv:14.0 /p:Configuration=Debug
-
通过在
MSBuild
任务上设置ToolsVersion
参数来覆盖版本: -
通过在解决方案中的项目上设置
$(Project.ToolsVersion)
属性来覆盖版本。 这使您可以使用与其他项目不同的ToolsetVersion
在解决方案中构建项目:
用于确定
ToolsVersion
的优先顺序(从最高到最低)是:
- 用于构建项目的
MSBuild
任务上的ToolsVersion
属性(如果有)。msbuild.exe
命令中使用的/toolsversion
(或/tv
)开关(如果有)。- 如果设置了环境变量
MSBUILDTREATALLTOOLSVERSIONSASCURRENT
,则使用当前的ToolsVersion
。- 如果设置了环境变量
MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT
并且项目文件中定义的ToolsVersion
大于当前ToolsVersion
,请使用当前的ToolsVersion
。- 如果设置了环境变量
MSBUILDLEGACYDEFAULTTOOLSVERSION
,或者未设置ToolsVersion
,则使用以下步骤:
- 项目文件的
Project
元素的ToolsVersion
属性。 如果此属性不存在,则假定它是当前版本。MSBuild.exe.config
文件中的默认工具版本。- 注册表中的默认工具版本。 有关更多信息,请参阅标准和自定义工具集配置 。
- 如果未设置环境变量
MSBUILDLEGACYDEFAULTTOOLSVERSION
,则使用以下步骤:
- 如果环境变量
MSBUILDDEFAULTTOOLSVERSION
设置为存在的ToolsVersion
,请使用它。- 如果在
MSBuild.exe.config
设置了DefaultOverrideToolsVersion
,请使用它。- 如果在注册表中设置了
DefaultOverrideToolsVersion
,请使用它。- 否则,请使用当前的
ToolsVersion
。
你有可能使用错误的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"
在我的情况下,确保您在Bin目录中使用MSBuild.exe;
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSbuild.exe
我只是猜测你有使用字符串插值的代码,并且没有正确的构建工具 。
我的解决方案是2部分:
1)使用Visual Studio 2015,选择您的Web项目,单击Project菜单,选择“Enable C#6”
2)我需要在生产web.config的末尾添加以下内容,就在配置结束标记之前。 请注意,版本号将来可能会发生变化,但关键是在步骤1中启用后,在开发web.config中查找类似文本,并确保将其转移到生产环境中。