【问题标题】:tfs build server - string interpolation $ Character is not validtfs 构建服务器 - 字符串插值 $ 字符无效
【发布时间】:2017-11-06 22:31:48
【问题描述】:

我在我的代码中使用$ 进行字符串插值。它编译得很好,但是当我签入我的代码时,构建服务器会抛出错误BC30037: Character is not valid。以下是我如何使用字符串插值的示例:

dim r = New RadNode($"{acq.FormNo} -  ${CInt(acq.TotalAmount)}", icon:=RadTreeIcons.RedTriangle)

构建服务器已安装 Visual Studio 2015 企业版。

如果我从命令提示符运行:

C:\Program Files (x86)\MSBuild\14.0\Bin>MSBuild /tv:14.0 "Proj.sln",代码编译文件。但是,如果我将上述参数更改为

C:\Program Files (x86)\MSBuild\14.0\Bin>MSBuild /tv:12.0 "Proj.sln",我得到同样的错误

我也做了这些改变:

我已将MSBuildArguments 属性设置为/p:VisualStudioVersion=14.0,并更改了TFSBuild.proj 文件并将这一行更改为<Project DefaultTargets="DesktopBuild" xmlns="schemas.microsoft.com/developer/msbuild/2003"; ToolsVersion="14.0">",但同样的问题正在发生。

更改了 (web vbproj) 文件并将 ToolSet 版本从 12.0 更改为 14.0。解决方案的其他 vb 项目部分仍以 12.0 为目标,但作为 web vb 项目的一部分在 dll 中编译。

【问题讨论】:

  • 您使用的是哪个版本? XAML 或 vNext 构建?您能否添加更多详细信息以进行故障排除,例如详细日志和您的环境。
  • 我正在使用 XAML 构建。
  • 嘿@Patrick-MSFT XAML 使用哪个版本的 msbuild 来构建,您可以像在 vNext 构建中那样设置版本吗?我记得 VS 中的构建配置对话框有一堆 msbuild 设置,但我不记得是否有办法设置 TFSBuild 用来设置运行 msbuild 的路径...可能是这种情况吗实例?

标签: tfsbuild string-interpolation


【解决方案1】:

位于此处的答案解决了我的问题:

BuildActivity ignores ToolsVersion

对于我们这些不是每天都生活在构建模板中的人来说,以下是让它为我工作的步骤:

首先找到与您的构建相关的模板(如果您已经知道在哪里可以找到它,请跳过几个步骤)。

只需右键单击构建定义并选择编辑构建定义 选择 Process 选项卡,您将看到模板的名称(如果您没有自定义它,很可能是 DefaultTemplate)。在最右侧单击显示详细信息以查看模板的路径。

转到团队资源管理器下的主页选项卡,然后单击源代码管理资源管理器

找到模板文件并双击进行编辑。它应该出现在这样的图形视图中。滚动直到找到 Run MSBuild for Project

单击此项目将立即显示属性

单击右侧的小图标 - 不要尝试输入它,因为它可能会爆炸并导致 Visual Studio 崩溃。 在引号中输入以下“C:\Program Files (x86)\MSBuild\14.0\bin”

现在是最重要的部分

对我来说,Run MSBuild for Project 在两个地方。

所以我只是在两个地方重复了上述步骤,然后在我签入 .xaml 文件后,我的构建终于可以正常工作了。

您可能需要从 TFS 工具中回收代理/控制器。

【讨论】:

    【解决方案2】:

    when i check in my code, the build server throws an error,看来您正在使用 CI 构建。您也可以尝试手动对构建进行排队。并在本地构建您的代码以缩小与您的 TFS 环境是否相关的范围。

    如果有一些有用的信息,还可以查看构建代理/服务器中的事件视图。

    没有 TFxxxx 的错误 BC30037: Character is not valid 可能与您的代码或语法有关。

    • 检查是否在编程元素中意外插入了额外字符。
    • 检查编程元素的拼写或构造是否仅使用对该类型元素有效的字符

    Character is not valid

    【讨论】:

    • 调查更多,看起来构建服务器正在使用 MsBuild 12 或更早版本进行构建,而您使用 msbuild 14.0 或更高版本来正确构建字符串插值。我将 MSBuildArguments 属性设置为 /p:VisualStudioVersion=14.0 并更改了 TFSBuild.proj 文件并将这一行更改为“schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">" 但同样的问题是正在发生。
    • @Baahubali 抱歉,稍后回复。这是 TFS XAML 构建中的一个老问题。在构建 .net4.6/c#6.0 时,进程模板总是指向错误的 msbuild 版本 12.0 而不是 14.0。这个问题有很多解决方案。如stackoverflow.com/questions/32659106/…。看来你的问题已经解决了。很高兴,当你自己修复它时总是更好;正如你理解它是如何工作的!:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2021-05-03
    • 1970-01-01
    • 2015-10-21
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多