Visual studio 2010 Visual Studio 2012解决方案的TeamCity中的MSBuild
我有一个VS 2012网络项目/sln,我正试图在TeamCity中构建它。它使用安装在TeamCity上的.NET 4.5 TeamCity服务器仅安装了VS 2010 我在生成运行时遇到此错误:Visual studio 2010 Visual Studio 2012解决方案的TeamCity中的MSBuild,visual-studio-2010,visual-studio,visual-studio-2012,msbuild,teamcity,Visual Studio 2010,Visual Studio,Visual Studio 2012,Msbuild,Teamcity,我有一个VS 2012网络项目/sln,我正试图在TeamCity中构建它。它使用安装在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)\MSB
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.
C:\BuildAgent\work\d5bc4e1b8005d077\CUSAAdmin.Web\CUSAAdmin.Web.csproj(799,3):
错误MSB4019:
引进项目
找不到“C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets”。
确认声明中的路径正确,并且文件存在于磁盘上。项目CUSAAdmin.Web\CUSAAdmin.Web.csproj失败。
项目CUSAAdmin.sln失败。
它正在尝试使用Visual Studio 2012(v11.0)来构建
我已经在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>
10
$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
事实证明它非常简单。要使MSBuild作为构建器在TeamCity中由VS2012生成的解决方案上运行VS2010,只需按如下方式设置构建配置的环境变量:
Name: env.VisualStudioVersion
Value: 10.0
注意TeamCity不需要安装VS2012。实际上,您不需要在CI服务器上安装Visual Studio。只需将几个文件夹从开发计算机复制到CI服务器上的同一位置 VS 2015:
- C:\ProgramFiles(x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web
- C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications
- C:\ProgramFiles(x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web
- C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications
- C:\ProgramFiles(x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web
- C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications
- C:\ProgramFiles(x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web
- C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications
- C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.6
- C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.5.2
- C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.5.1
- C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.5
- C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.0.1
- C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.0
.csproj
或.vbproj
)文件中的
位置
完成此操作后,您的项目将编译。您仍然应该将VisualStudioVersion显式设置为您正在使用的版本,以确保设置正确
注意:此解决方案适用于所有项目类型(包括web项目)。对于一个网站(没有项目文件),我最终安装了与我正在使用的.NET SDK版本相匹配的,因为缺少注册表项导致它无法生成
如上所述:
- 安装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" />
与:
显然,您必须确保在
中的nuget安装和路径上的版本都与您的案例相匹配,我完全不同意更改项目文件,因为这可能会影响其他开发人员。这是我的工作原理,因为MS build文件夹中缺少v11.0文件夹:
1) 创建v111
首先,TeamCity不需要任何版本的Visual Studio来构建。使用MSBuild运行程序配置项目中的生成步骤时,TeamCity需要知道要使用哪个版本的MSBuild。这是一个构建步骤的设置。必须根据生成计算机上安装的.NET工具在生成步骤配置中选择正确的MSBuild版本。TeamCity将使用该值确定位置路径,并在调用MSBuild时设置环境变量
VisualStudio 2012/2013的问题在于,它仅由TeamCity从8.1.0开始支持。因此,如果您的TeamCity版本在8.1之前。您需要升级到最新的8.1.x才能查看MSBuild Tools 2013的设置。在生成步骤设置中选择正确的MSBuild版本后,问题将消失。有关此处阅读的详细信息:或者,您可以将所需的生成目标从c:\Program Files(x86)\MSBuild复制到项目的子目录(例如。\build),确保保留结构并将以下内容添加到csproj中:
<!-- redirect msbuild path so targets can be added to source control -->
<PropertyGroup>
<MSBuildExtensionsPath32>..\Build\</MSBuildExtensionsPath32>
</PropertyGroup>
..\Build\
例如,如果我的项目根是C:\Dev\MyProjSln\MyProj
- 创建文件夹C:\Dev\MyProjSln\Build\Microsoft\VisualStudio\version\WebApplications\
<!-- redirect msbuild path so targets can be added to source control --> <PropertyGroup> <MSBuildExtensionsPath32>..\Build\</MSBuildExtensionsPath32> </PropertyGroup>