TeamCity Build using C#6

2019-02-17 00:33发布

问题:

We use TeamCity (9.0.1) as our build server, but having recently upgraded our ASP.NET MVC solution to use VS2015 and C#6 syntax, I now get the following error message on our build server:

Can not start build runner

and more specifically:

C:\TeamCity\buildAgent\work\86ee61c6c333dc3d\MyApplication\MyApplication.csproj.metaproj : error MSB4025: The project file could not be loaded. Could not find file 'C:\TeamCity\buildAgent\work\86ee61c6c333dc3d\MyApplication\MyApplication.csproj.metaproj'.

I followed the advice in several different posts (though these are mainly TFS focused rather than TeamCity and don't refer to the missing ".metaproj" file directly):

  • TFS 2013 building .NET 4.6 / C# 6.0
  • C# 6.0 TFS Builds
  • Running TFS Build with C# 6.0 features

So, in summary, I have made the following changes to my Build Server:

  1. Installed Visual Studio 2015 Update 2
  2. Changed the PowerShell script that performs the build

from:

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

To:

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

Note:

  • If I log onto the Build Server and attempt to compile the solution using VisualStudio 2015 then this works fine.

  • In one of the posts mentioned above, it discussed upgrading from "TfvsTemplate.11.1.xaml" to "TfvsTemplate.12.xaml". But as far as I can't tell, I don't use or reference this. Maybe I'm much mistaken here, in which case an idiot's guide of what to do next would be gratefully received.

回答1:

Finally....we fixed it.

I had to take the following steps on the Build Server:

  1. Installed VS2015 Update 2
  2. Edit the Environment Variable "PATH" to change one setting from C:\Program Files (x86)\MSBuild\12.0\Bin\; to C:\Program Files (x86)\MSBuild\14.0\Bin\;
  3. Since we use TeamCity to fire off a PowerShell script that in turn fires off the MSBuild. I updated the PowerShell module PSAKE from 4.2 to 4.6 (but this might not have been necessary)
  4. Created a new Environment Variable "MSBuildEmitSolution" and gave that a value of "1"
  5. Copied the file "Microsoft.Build.Tasks.v12.0.dll" from "C:\Program Files (x86)\MSBuild\12.0\Bin\amd64" to "C:\Program Files (x86)\MSBuild\14.0\Bin\amd64". No idea why this was reported as an error in our BUILD log because it's not an AMD machine...
  6. Using NUGET, had to add the package "Microsoft.Net.Compilers" to every C# project that used C#6 syntax (basically, all of them)

Not all of the above steps may be strictly necessary, but I would suggest that certainly steps 1. and 5. were definitely required.

HTH

Griff



回答2:

I've had this issue before and I think you can resolve it by logging into the TeamCity directory and deleting all the files in the working directory. Or doing a "clean" of the working directory before you do a checkout. I recommend just deleting the files manually. Also with TeamCity 9.1.6, you don't need the full Visual Studio installed on the server, just the Microsoft Build Tools 2015 (https://www.microsoft.com/en-us/download/details.aspx?id=48159), and then use the "MSBuild" runner type or the "Visual Studio (sln)" runner type.