Visual Studio 2012解决方案的TeamCity中的MSBuild

我有一个VS 2012 web项目/ sln,我正在尝试在TeamCity中构建。 它使用安装在TeamCity上的.NET 4.5。

TeamCity服务器仅安装了VS 2010

运行构建时出现此错误:

C:BuildAgentworkd5bc4e1b8005d077CUSAAdmin.WebCUSAAdmin.Web.csproj(799, 3): 
error MSB4019: 
The imported project 
    "C:Program Files (x86)MSBuildMicrosoftVisualStudiov11.0WebApplicationsMicrosoft.WebApplication.targets" was not found. 
 Confirm that the path in the <Import> declaration is correct, and that the file exists on disk. Project CUSAAdmin.WebCUSAAdmin.Web.csproj failed. 
 Project CUSAAdmin.sln failed. 

它试图使用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)MicrosoftVisualStudiov$(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所建议的那样,您可以将它们复制到项目的子目录中,并更改MSBuild中的<MSBuildExtensionsPath32>位置(通常为.csproj.vbproj )文件。

    一旦你完成了这个项目,你的项目就会被编译。 您仍然应该将VisualStudioVersion明确设置为您正在使用的VisualStudioVersion,以确保其设置正确。

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


    结果很简单。 为了让MSBuild运行VS2010作为TeamCity中由VS2012制作的解决方案的构建器,只需为此构建配置设置环境变量即可:

    在这里输入图像描述

    Name: env.VisualStudioVersion 
    Value: 10.0
    

    注意TeamCity不需要安装VS2012。


    或者,您可以将所需的构建目标从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 Microsoft VisualStudio version WebApplications
  • 将C: Program Files文件(x86) MSBuild Microsoft VisualStudio version> WebApplications 的内容复制到创建的文件夹
  • 在csproj的Project节点下的Property Group中添加MSBuildExtensionsPath32元素
  • 利润!
  • 就个人而言,我更喜欢这种跟踪构建目标依赖关系的方法,因为它可以防止构建服务器依赖于具有未记录的文件夹结构需求,并将您的依赖关系存入源代码控制

    链接地址: http://www.djcxy.com/p/81627.html

    上一篇: MSBuild in TeamCity of Visual Studio 2012 solution

    下一篇: Differences between Visual Studio (.sln) build runner and MSBuild