Build VS2013 on a TFS Build Server With Only VS2013

余生长醉 提交于 2019-12-17 21:56:26

问题


I'm setting up a new build server to support a migration of our development team from VS2010 to VS2013. We are not migrating our TFS server just yet so the new build server has been set up as a VS2010 Build Controller with 2 Agents. I have also installed VS2013 on the machine (sledge hammer approach).

All our code has been migrated to target .Net 4.5.1 and compiles fine on a developer's workstation.

Most of our solutions build fine, except the solution that contains web projects. These projects are complaining:

The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" was not found.

The imported project is using the VisualStudioVersion variable in the build process through these two lines:

<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
...
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

which according to this page:

http://msdn.microsoft.com/en-us/library/vstudio/bb383796.aspx

will be set to "11.0" for both 4.5 and 4.5.1 targets. But the build machine only has a 12.0 version of the above path:

"C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets"

These same .csproj lines seem to be used in a brand new VS2013 project so I'm not sure how this could ever resolve correctly on a build machine.


回答1:


It is due to Vs2012 adding in csproj file this part:

  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  </PropertyGroup>

You can safely remove that part and your solution will build.

You have to ensure that the .proj file begin with <Project ToolsVersion="12" otherwise the next time you open the project with visual studio 2010, it will add the removed node again.

otherwise if you need to use webdeploy or you use a build server the above solution will not work but you can specify the VisualStudioVersion property in your build script:

msbuild myproject.csproj /p:VisualStudioVersion=12.0

or edit your build definition:




回答2:


What you could do is specify the VisualStudioVersion property when running msbuild on the build server

msbuild myproject.csproj /p:VisualStudioVersion=12.0



回答3:


I ran into a similar issue...and here's why. Starting with VS2013, MSBuild is shipped as part of Visual Studio instead of the .NET Framework. Refer to this msdn blog.

So to resolve my issue [the correct way], I had to use MSBuild from the "C:\Program Files (x86)\MSBuild\12.0\bin\" instead of "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\"




回答4:


You should be able to fix the Tools Version by editing the Build Template.

Open the template .xaml file and find the "Run MsBuild for Project" activity. In the properties there is the option to set the tools version. If needed, you could create a template level property to make it easier to configure.



来源:https://stackoverflow.com/questions/20002532/build-vs2013-on-a-tfs-build-server-with-only-vs2013

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!