提问人:Heinrich 提问时间:3/22/2017 最后编辑:VMAtmHeinrich 更新时间:7/19/2021 访问量:86448
错误 CS1056:在 tfs 持续集成进程上运行 msbuild 时出现意外字符“$”
Error CS1056: Unexpected character '$' running the msbuild on a tfs continuous integration process
问:
我有一个框架针对的项目,作为 tfs 上持续集成过程的一部分,我们创建了一个构建解决方案任务,以确保代码正确编译。
现在,TFS 服务器具有最新版本的 .在寄存器上,这是框架的 Release 密钥的值.NET Framework 4.6.1
.Net Famework 4.6.2
在所有其他操作系统版本上:394806 => .NET Framework 4.6.2
但是当构建运行时,它会出现以下错误:
Error CS1056: Unexpected character '$'
我不想用 来解决这个问题,请提供另一种解决方法来解决这个问题。string.Format
是否需要在 TFS 服务器上安装其他内容?
答:
我只是猜测你有带有字符串插值的代码,但没有合适的构建工具。
评论
将 MS Build Tools 2015 安装到中后,需要使用新值 () 覆盖生成服务器的 MSBuild 版本。%ProgramFiles%\MSBuild\14.0\bin
14.0
您应该阅读 MSDN 文章(或此答案),但 TL;DR 您的选择是:
从命令行生成项目或解决方案时,使用开关(或简称)替代版本:
/ToolsVersion
/tv
msbuild.exe someproj.proj /tv:14.0 /p:Configuration=Debug
通过在任务上设置参数来覆盖版本:
ToolsVersion
MSBuild
<MSBuild Projects="myProject.proj" ToolsVersion="14.0" Targets="go" />
通过在解决方案中的项目上设置
$(Project.ToolsVersion)
属性来重写版本。这使您可以在解决方案中生成一个项目,其 a 与其他项目不同:ToolsetVersion
<Project ToolsVersion="14.0" ... </Project>
优先级顺序(从最高到最低)用于确定:
ToolsVersion
- 用于生成项目的任务的属性(如果有)。
ToolsVersion
MSBuild
- 命令中使用的 (或 ) 开关(如果有)。
/toolsversion
/tv
msbuild.exe
- 如果设置了环境变量,则使用当前的 .
MSBUILDTREATALLTOOLSVERSIONSASCURRENT
ToolsVersion
- 如果设置了环境变量,并且项目文件中定义的 大于当前 ,则使用当前 .
MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT
ToolsVersion
ToolsVersion
ToolsVersion
- 如果设置了环境变量,或者未设置环境变量,则使用以下步骤:
MSBUILDLEGACYDEFAULTTOOLSVERSION
ToolsVersion
- 项目文件的
Project
元素的属性。如果此属性不存在,则假定它是当前版本。ToolsVersion
- 文件中的默认工具版本。
MSBuild.exe.config
- 注册表中的默认工具版本。有关详细信息,请参阅标准和自定义工具集配置。
- 如果未设置环境变量,则使用以下步骤:
MSBUILDLEGACYDEFAULTTOOLSVERSION
- 如果环境变量设置为已存在,请使用它。
MSBUILDDEFAULTTOOLSVERSION
ToolsVersion
- 如果设置在 中,请使用它。
DefaultOverrideToolsVersion
MSBuild.exe.config
- 如果在注册表中设置,请使用它。
DefaultOverrideToolsVersion
- 否则,请使用当前的 .
ToolsVersion
评论
"%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\msbuild.exe"
安装 Nuget 包可以解决此问题 Microsoft.Net.编译器。 下面是我突出显示的答案的链接: 项目使用 Visual Studio 生成良好,但从命令行失败
该功能是 C#6 的语法糖,请尝试安装最新的 框架版本 4.6.2 https://www.microsoft.com/en-us/download/details.aspx?id=53345
然后转到“项目”属性并在“应用程序”上进行更改 选项指向 Latest。你不需要 更改代码以将字符串插值替换为 字符串。格式化方法来修复它。如果您仍然收到此错误, 这是因为,运行构建的编译器不是最新的 版本的 C#,请尝试从 Nuget Microsoft和 再次编译,这应该可以解决问题。如果你想避免 安装这个包,尝试打开你的 .csproj 并查看 ToolsVersion.that 应该指向版本 12,然后更改它 设置为 14,但请确保您已安装最新版本的 MSBuild from https://www.microsoft.com/en-us/download/details.aspx?id=48159 或 go 到 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生成工具2015
3- 大锤和最后一个选项,但对我来说最好的,因为您不需要处理对 nuget 的依赖,是在运行该过程的 tfs 服务器上安装 Visual Studio 版本。
希望这会有所帮助
评论
您可能使用错误的 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项目,单击“项目”菜单,选择“启用C# 6”
2) 我需要将以下内容添加到生产 web.config 的末尾,就在配置结束标记之前。请注意,版本号将来可能会更改,但关键是在步骤 1 中启用后,在开发 web.config 中查找类似的文本,并确保将其传输到生产环境。
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
Microsoft.Net.Compilers 不起作用,但从 Nuget 安装 DotNetCompilerPlatform 可以。
必须使用 msbuild 版本 15。
评论
我遇到这个问题是因为我使用了错误的msbuild路径。我使用的是对应于旧版本的 Visual Studio 和 Frameworks,现在我使用 Visual Studio 2019,因此正确的构建路径是或取决于您要构建的体系结构。C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\amd64\MSBuild.exe
评论
MSBuild
.NET