TFS不会编译字符串插值语法

时间:2015-07-30 10:38:04

标签: tfs visual-studio-2015 roslyn

上周发布时,我更新到Visual Studio 2015。 Resharper建议我可能想使用<form action="/" ...> 更新以下字符串:

string.Format

使用字符串插值:

string filePath = HttpContext.Server.MapPath(string.Format("~/App_Data/{0}.xlsx", Guid.NewGuid()));

我这样做了,一切都很好。

但是我打破了TFS上的构建:

  

Controllers \ MyController.cs(224):   意外的角色&#39; $&#39;

因此,C#6中的新功能似乎无法由我们较旧的非更新版本的TFS编译。

该项目仍然以使用Framework 4.5为目标,但我没有针对4.6。我(错误地)认为仍然以旧框架为目标意味着它可以由仍然使用VS2013和我们的TFS构建服务器的其他团队成员构建。

所以看起来我们的TFS需要更新......某些东西。

我需要在TFS服务器上安装什么才能让它编译这个新语法?最新版本的.NET Framework还是别的什么?

3 个答案:

答案 0 :(得分:15)

在构建服务器上安装.NET Framework 4.6Build Tools 2015。 然后是override the ToolsVersion/tv:14.0)在MSBuild参数中。

答案 1 :(得分:6)

不幸的是,如果没有在TFS构建服务器上安装VS2015,似乎没有一种简单的方法可以让旧版本的TFS使用C#6.0。如果你能做到这一点,我会建议。无论出于何种原因,如果不能,那么以下内容对我有用:

我按照另一个答案的说明,但仅此一点不起作用。我还必须编辑默认的TFS构建过程模板(在我的情况下可以在$ // BuildProcessTemplates中找到)并将“运行MSBuild for Project”节点的ToolPath属性更改为MSBuild 14.0的位置(通常是C: \ Program Files(x86)\ MSBuild \ 14.0 \ Bin)。

然后,您需要更新构建定义以使用新构建模板(如果您复制/编辑了新构建模板,则需要编辑原始模板)。

此时,您应该能够使用TFS构建C#6项目,但如果您也尝试进行Web部署/打包,那么还有一些步骤。

在构建服务器上,在C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v14.0中,应该有一个Typescript文件夹而没有其他内容。在使用VS2015的本地计算机上,转到相同的路径。应该有一个Web和WebApplications文件夹。将它们复制到服务器的文件夹中。您现在也应该能够打包/部署Web项目。

答案 2 :(得分:0)

请检查TFS Build流程模板中是否存在“Run MSBuild for Project”。在我的情况下,它存在两次,并花了我一段时间来弄清楚为什么ToolPath的更改没有达到预期的效果。