VisualStudio2012解决方案的 TeamCity 中的 MSBuild

我有一个 VS 2012网络项目/sln,我试图在 TeamCity 建立。它使用。NET 4.5,安装在 TeamCity 上。

TeamCity 服务器有 只安装了 VS2010

当构建运行时,我得到这个错误:

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)来构建。

我已经设置了 VisualStudioVersion10Xml虽然? ?

 <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>
29866 次浏览

其实很简单。要让 MSBuild 运行 vs2010作为 vs2012在 TeamCity 提供的解决方案的构建器,只需设置构建配置的环境变量如下:

enter image description here

Name: env.VisualStudioVersion
Value: 10.0

注意 TeamCity 不需要安装 VS2012。

实际上,您不需要在 CI 服务器上安装 VisualStudio。您只需要将几个文件夹从开发计算机复制到 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)参考程序集 Microsoft Framework. NETFramework v4.6

.NET 4.5.2:

  • C: Program Files (x86)参考程序集 Microsoft Framework. NETFramework v4.5.2

.NET 4.5.1:

  • C: Program Files (x86)参考程序集 Microsoft Framework. NETFramework v4.5.1

.NET 4.5:

  • C: Program Files (x86)参考程序集 Microsoft Framework. NETFramework v4.5

.NET 4.0.1:

  • C: Program Files (x86)参考程序集 Microsoft Framework. NETFramework v4.0.1

.NET 4.0:

  • C: Program Files (x86)参考程序集 Microsoft Framework. NETFramework v4.0

或者,作为 马特建议,您可以将它们复制到项目的子目录中,并更改 MSBuild (通常是 .csproj.vbproj)文件中的 <MSBuildExtensionsPath32>位置。

完成此操作后,您的项目将编译。您仍然应该显式地将 VisualStudioVersion 设置为正在使用的版本,以确保它设置正确。

注意: 此解决方案适用于所有项目类型(包括 Web 项目)。对于一个网站(没有项目文件) ,我最终安装了与。我正在使用的 NET SDK 版本,因为缺少注册表项导致它无法构建。

给你所述:

  • 安装螺母 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" />

显然,您必须确保版本匹配您的情况下都安装的 nget 和路径在 <Import>

我完全不同意更改项目文件,因为这可能会影响其他开发人员。自从 MS build 文件夹中缺少 v11.0文件夹以来,这个方法对我很有效: 1)创建 v111。

  1. 在 C: Program Files (x86)上创建 v11.0文件夹 MSBuild Microsoft VisualStudio
  2. 从“ C: Program Files (x86) MSBuild Microsoft VisualStudio v11.0”开发框中复制 Web 和 WebApplications 文件夹
  3. 太棒了,太有魅力了
  4. 注意: 我安装了“ MicrosoftVisualStudio2012Shell (独立)可再发行包”

首先,TeamCity 不需要使用任何版本的 VisualStudio 来构建。使用 MSBuild 运行程序配置项目中的生成步骤时,TeamCity 需要知道要使用哪个版本的 MSBuild。这是构建步骤的设置。属性在生成步骤配置中选择正确的 MSBuild 版本。NET 工具安装在生成计算机上。TeamCity 将使用该值来确定位置路径,并在调用 MSBuild 时设置一个环境变量。

Visual Studio 2012/2013的问题在于它只受 TeamCity 从8.1.0开始的支持。因此,如果 TeamCity 版本在8.1之前。您需要升级到最新的8.1.x 才能查看 MSBuild Tools 2013的设置。一旦在生成步骤设置中选择了适当的 MSBuild 版本,问题就会消失。欲了解更多信息,请点击这里: http://blog.turlov.com/2014/07/upgrade-teamcity-to-enable-support-for.html

或者,您可以将所需的生成目标从 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

  • 创建文件夹 C: Dev MyProjSln Build MicrosoftVisualStudio version WebApplications
  • 将 C: Program Files (x86)的内容复制到创建的文件夹中
  • 将 MSBuildExtensionsPath32元素添加到 csproj 中 Project 节点下的 Property Group
  • 利润!

就个人而言,我更喜欢这种跟踪构建目标依赖关系的方法,因为它可以防止构建服务器依赖于没有文档记录的文件夹结构需求,并将您的依赖关系纳入源代码控制