使用C#6进行TeamCity构建

7
我们使用TeamCity(9.0.1)作为我们的构建服务器,但是最近升级了我们的ASP.NET MVC解决方案以使用VS2015和C#6语法,现在在我们的构建服务器上出现以下错误信息:
“无法启动生成运行程序”
更具体地说:
"C:\TeamCity\buildAgent\work\86ee61c6c333dc3d\MyApplication\MyApplication.csproj.metaproj : error MSB4025: 项目文件无法加载。找不到文件'C:\TeamCity\buildAgent\work\86ee61c6c333dc3d\MyApplication\MyApplication.csproj.metaproj'."
我遵循了几篇不同帖子中的建议(虽然这些主要是针对TFS而非TeamCity,并且没有直接提到缺少的“.metaproj”文件):

因此,总的来说,我对我的构建服务器进行了以下更改:

  1. 安装了Visual Studio 2015 Update 2
  2. 更改了执行构建的PowerShell脚本

:

msbuild '..\MyApplication.sln' /t:Build /p:Configuration=Release /p:RunCodeAnalysis=Always /p:VisualStudioVersion=12.0

:

msbuild '..\MyApplication.sln' /t:Build /tv:14.0 /p:GenerateBuildInfoConfigFile=false /p:Configuration=Release /p:RunCodeAnalysis=Always /p:VisualStudioVersion=14.0

注意:

  • 如果我登录构建服务器并尝试使用VisualStudio 2015编译解决方案,则可以正常工作。

  • 在上面提到的帖子中,它讨论了从"TfvsTemplate.11.1.xaml"升级到"TfvsTemplate.12.xaml"。但是据我所知,我没有使用或引用它。也许我在这里非常错误,在这种情况下,将会非常感激一个入门指南。


1
看起来是同样的问题:https://youtrack.jetbrains.com/issue/TW-44075。你能否检查一下这个问题是否在TeamCity 9.1.6上重现? - Alina Mishina
1
MsBuild路径是否已更新为使用C:\Program Files (x86)\MSBuild\14.0\Bin\下的路径? - Kai Zhao
嗨,凯。MSBuild路径环境变量仍然指向\12.0\,所以我将其更新为14.0并重新启动了服务器。TeamCity代理现在报告路径为\14.0\,但是构建仍然报告“无法加载项目文件。找不到文件'C:\ TeamCity \ buildAgent \ work \ 86ee61c6c333dc3d \ MyApplication \ MyApplication.csproj.metaproj'”。 - DrGriff
Alina:根据9.1.x的发布说明,它支持VS 2015和.NET增强功能。因此,我在另一台机器上安装了最新版本的TeamCity(以免影响我们的构建服务器),但现在它也报告了同样的问题。 - DrGriff
@DrGriff 如果你还有问题,我会先按照Boyan建议的那样清理一下工作文件夹,如果没自动清理干净。然后在机器上使用14.0版命令行中的msbuild构建解决方案文件。如果构建失败,我会排查构建依赖关系;如果成功了,我会请求TeamCity运行一个脚本来执行msbuild,而不是使用任何现有的模块/附加组件。这样应该能够隔离出问题。 - Kai Zhao
@KaiZhao:那基本上就是我们遵循的过程。最终让它工作了(请参见我下面的答案帖子)。感谢您在这里的帮助。 - DrGriff
2个回答

11

终于……我们解决了这个问题。

我在构建服务器上进行了以下步骤:

  1. 安装了VS2015 Update 2
  2. 编辑环境变量“PATH”,将一个设置从C:\Program Files (x86)\MSBuild\12.0\Bin\;更改为C:\Program Files (x86)\MSBuild\14.0\Bin\;
  3. 由于我们使用TeamCity来触发一个PowerShell脚本,进而触发MSBuild。我将PowerShell模块PSAKE从4.2更新到4.6(但这可能并不是必要的)
  4. 创建了一个新的环境变量“MSBuildEmitSolution”,并赋值为“1”
  5. 将文件“Microsoft.Build.Tasks.v12.0.dll”从“C:\Program Files (x86)\MSBuild\12.0\Bin\amd64”复制到“C:\Program Files (x86)\MSBuild\14.0\Bin\amd64”。不知道为什么我们的BUILD日志报告这是一个错误,因为这不是AMD机器...
  6. 使用NUGET,必须为使用C#6语法的每个C#项目添加“Microsoft.Net.Compilers”软件包(基本上是所有项目)

以上步骤未必都是必需的,但我会建议至少需要执行步骤1和步骤5。

希望对你有所帮助。

Griff


5
有人能否给出一个好的解释,为什么需要"Microsoft.Net.Compilers"? - DrGriff
将NUGET“Microsoft.Net.Compilers”添加到使用C#6语法的每个C#项目中,可以帮助我轻松解决问题,无需其他步骤。谢谢。 - Jiří Herník

0

我之前也遇到过这个问题,我认为你可以通过登录TeamCity目录并删除工作目录中的所有文件来解决它。或者在检出之前对工作目录进行“清理”。我建议手动删除文件。此外,在TeamCity 9.1.6中,您不需要在服务器上安装完整的Visual Studio,只需安装Microsoft Build Tools 2015(https://www.microsoft.com/en-us/download/details.aspx?id=48159),然后使用“MSBuild”运行器类型或“Visual Studio(sln)”运行器类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接