MSBuild在Visual Studio 2012解决scheme的TeamCity中
我有一个VS 2012 web项目/ sln,我正在尝试在TeamCity中构build。 它使用安装在TeamCity上的.NET 4.5。
TeamCity服务器只安装了VS 2010 。
生成运行时出现此错误:
C:\BuildAgent\work\d5bc4e1b8005d077\CUSAAdmin.Web\CUSAAdmin.Web.csproj(799, 3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk. Project CUSAAdmin.Web\CUSAAdmin.Web.csproj failed. Project CUSAAdmin.sln failed.
它试图使用Visual Studio 2012(v11.0)来构build。
我已经在build.xml中将VisualStudioVersion设置为10了 。
<Target Name="BuildPackage"> <MSBuild Projects="CUSAAdmin.sln" ContinueOnError="false" Targets="Rebuild" Properties="Configuration=$(Configuration); VisualStudioVersion=10.0" />
这个项目也是VS2010的默认设置
<PropertyGroup> <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion> <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
实际上,您不需要在CI服务器上安装Visual Studio。 您只需将开发机器上的几个文件夹复制到CI服务器上的相同位置即可。
VS 2015:
- C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v14.0 \ Web
- C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v14.0 \ WebApplications
VS 2013:
- C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ Web
- C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ WebApplications
VS 2012:
- C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web
- C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ WebApplications
VS 2010:
- C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web
- C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications
.NET 4.6:
- C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.6
.NET 4.5.2:
- C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.5.2
.NET 4.5.1:
- C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.5.1
.NET 4.5:
- C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.5
.NET 4.0.1:
- C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.0.1
.NET 4.0:
- C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.0
或者,正如Matt所build议的那样 ,您可以将它们复制到项目的子目录中,并更改MSBuild(通常为.csproj
或.vbproj
)文件中的<MSBuildExtensionsPath32>
位置。
一旦你完成了这个,你的项目将被编译。 您仍然应该将VisualStudioVersion明确地设置为您正在使用的VisualStudioVersion,以确保其设置正确。
注意:此解决scheme适用于所有项目types(包括Web项目)。 对于一个网站(没有项目文件),我最终安装了与我正在使用的.NET SDK版本匹配的Windows SDK ,因为缺less导致它不能生成的registry项。
原来这很简单。 为了让MSBuild运行VS2010作为TeamCity中由VS2012制作的解决scheme的构build器,只需设置构buildconfiguration的环境variables,如下所示:
Name: env.VisualStudioVersion Value: 10.0
注意TeamCity不需要安装VS2012。
或者,您可以将所需的构build目标从c:\ Program Files(x86)\ MSBuild复制到项目的子目录(例如。\ Build),确保保留结构并将以下内容添加到csproj中:
<!-- redirect msbuild path so targets can be added to source control --> <PropertyGroup> <MSBuildExtensionsPath32>..\Build\</MSBuildExtensionsPath32> </PropertyGroup>
例如,如果我的项目根目录是C:\ Dev \ MyProjSln \ MyProj
- 创build文件夹C:\ Dev \ MyProjSln \ Build \ Microsoft \ VisualStudio \ version \ WebApplications \
- 将C:\ Program Files文件(x86)\ MSBuild \ Microsoft \ VisualStudio \ version> \ WebApplications \的内容复制到创build的文件夹
- 在csproj的Project节点下的Property Group中添加MSBuildExtensionsPath32元素
- 利润!
就个人而言,我更喜欢跟踪构build目标依赖关系的方法,因为它可以防止构build服务器依赖于具有未公开的文件夹结构需求,并将您的依赖关系存入源代码pipe理
如此处所述:
- 安装nuget
MSBuild.Microsoft.VisualStudio.Web.targets
- 编辑.csproj文件
更换:
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" /> <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
有:
<Import Project="..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets" Condition="true" />
很明显,你必须确保版本符合你的情况,在安装nuget和<Import>
path
我完全不同意更改项目文件,因为这可能会影响其他开发人员。 这是什么为我工作,因为MS生成文件夹上缺lessv11.0文件夹:1)创buildv111。
- 在C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio上创buildv11.0文件夹
- 从我的开发框“C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v11.0”复制Web和WebApplications文件夹
- Booom! 像魅力工作\
- 注意:我安装了“Microsoft Visual Studio 2012 Shell(隔离)可再发行组件包”
首先,TeamCity不需要任何版本的Visual Studio来构build。 当使用MSBuild运行器configuration项目中的构build步骤时,TeamCity需要知道要使用哪个版本的MSBuild。 这是一个构build步骤的设置。 根据构build机器上安装的.NET工具,必须在构build步骤configuration中select适当的MSBuild版本。 TeamCity将使用该值来确定位置path,并在调用MSBuild时设置一个环境variables。
Visual Studio 2012/2013的问题是,它只能从TeamCity 8.1.0开始支持。 所以如果你的TeamCity版本在8.1之前。 您需要升级到最新的8.1.x才能看到MSBuild Tools 2013的设置。一旦在构build步骤设置中select了正确的MSBuild版本,问题就会消失。 欲了解更多信息,请阅读这里: http : //blog.turlov.com/2014/07/upgrade-teamcity-to-enable-support-for.html