我正在建立一个新的构建服务器,以支持我们的开发团队从VS2010迁移到VS2013。我们尚未迁移我们的TFS服务器,因此新的构建服务器已设置为带有2个代理的VS2010构建控制器。我还在机器上安装了VS2013(大锤方法)。
我们所有的代码都已迁移到目标.Net 4.5.1并在开发人员的工作站上编译好。
除了包含Web项目的解决方案外,我们的大多数解决方案都构建得很好。这些项目都在抱怨:
找不到导入的项目“C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ WebApplications \ Microsoft.WebApplication.targets”。
导入的项目在构建过程中通过以下两行使用VisualStudioVersion变量:
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
...
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
根据此页面:
http://msdn.microsoft.com/en-us/library/vstudio/bb383796.aspx
对于4.5和4.5.1目标,将设置为“11.0”。但构建机器只有上述路径的12.0版本:
“C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ WebApplications \ Microsoft.WebApplication.targets”
这些相同的.csproj行似乎在一个全新的VS2013项目中使用,所以我不确定如何在构建机器上正确解析。
答案 0 :(得分:26)
这是由于Vs2012在csproj文件中添加了这一部分:
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
您可以安全地删除该部分,您的解决方案将会构建。
您必须确保.proj文件以<Project ToolsVersion="12"
开头,否则下次使用visual studio 2010打开项目时,它将再次添加已删除的节点。
否则,如果您需要使用webdeploy或使用构建服务器,上述解决方案将无效,但您可以在构建脚本中指定VisualStudioVersion
属性:
msbuild myproject.csproj /p:VisualStudioVersion=12.0
或编辑您的构建定义:
答案 1 :(得分:15)
在构建服务器上运行msbuild时,您可以做的是指定 VisualStudioVersion属性
msbuild myproject.csproj /p:VisualStudioVersion=12.0
答案 2 :(得分:5)
我遇到了类似的问题......这就是原因。从VS2013开始,MSBuild作为Visual Studio的一部分而非.NET Framework提供。请参阅此msdn blog。
所以要解决我的问题[正确方法],我不得不使用“C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \”而不是“C:\ Windows \ Microsoft.NET \”中的MSBuild Framework64 \ v4.0.30319 \“
答案 3 :(得分:2)
您应该可以通过编辑构建模板来修复工具版本。
打开模板.xaml文件,找到“运行项目的MsBuild”活动。在属性中,可以选择设置工具版本。如果需要,您可以创建模板级属性以使其更易于配置。