我有一个VS 2012 web项目/ sln,我正在尝试在TeamCity中构建 . 它使用安装在TeamCity上的.NET 4.5 .
TeamCity服务器具有 VS 2010 installed only .
构建运行时出现此错误:
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.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>
6 回答
实际上,您不需要在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:
.NET 4.5.2:
.NET 4.5.1:
.NET 4.5:
.NET 4.0.1:
.NET 4.0:
或者,如Matt suggested,您可以将它们复制到项目的子目录中,并更改MSBuild(通常为
.csproj
或.vbproj
)文件中的<MSBuildExtensionsPath32>
位置 .完成此操作后,您的项目将进行编译 . 您仍应将VisualStudioVersion明确设置为您正在使用的那个,以确保它设置正确 .
事实证明它非常简单 . 要使MSBuild作为VS2012在TeamCity中构建的解决方案的构建器上运行VS2010,只需为构建配置设置环境变量,如下所示:
Note TeamCity does not need VS2012 installed.
或者,您可以将所需的构建目标从c:\ Program Files(x86)\ MSBuild复制到项目的子目录(例如 . \ Build),确保保留结构并将以下内容添加到csproj中:
例如,如果我的项目根目录是C:\ Dev \ MyProjSln \ MyProj
创建文件夹C:\ Dev \ MyProjSln \ Build \ Microsoft \ VisualStudio \ version \ WebApplications \
将C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ version> \ WebApplications \的内容复制到创建的文件夹
将MSBuildExtensionsPath32元素添加到csproj中Project节点下的Property Group
利润!
就个人而言,我更喜欢这种跟踪构建目标依赖关系的方法,因为它可以防止构建服务器依赖于具有未记录的文件夹结构要求,并将您的依赖项转换为源代码控制
如here所述:
安装nuget
MSBuild.Microsoft.VisualStudio.Web.targets
编辑.csproj文件
更换:
有:
显然你必须确保版本符合你的情况在安装的nuget和
<Import>
中的路径我完全不同意更改项目文件,因为这可能会影响其他开发人员 . 这对我有用,因为MS build文件夹中缺少v11.0文件夹:1)创建v111 .
在C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio上创建v11.0文件夹
从我的开发框中复制Web和WebApplications文件夹"C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0"
Booom!工作就像一个魅力\
注意:我安装了"Microsoft Visual Studio 2012 Shell (Isolated) Redistributable Package"
首先,TeamCity不需要构建任何版本的Visual Studio . 使用时配置项目中的构建步骤MSBuild运行者TeamCity需要知道要使用哪个版本的MSBuild . 这是构建步骤的设置 . 必须根据构建计算机上安装的.NET工具在构建步骤配置中选择正确的MSBuild版本 . 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