试图在构建服务器上构建我的项目给我以下错误:

Microsoft (R) Build Engine Version 4.0.30319.1
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.SqlTasks.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.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.
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.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.

几个月前,我通过在Build Server上安装Visual Studio 2010解决了这个问题。但是现在我从头开始安装一个新的服务器,我想知道是否有更好的解决方案来解决这个问题。


当前回答

解决方案是在构建服务器代理上安装可重新分发的包。它可以通过多种方式实现,下面将介绍其中3种方式。挑一个最适合你的。

使用UI安装程序

这是原来的答案

现在,在2017年,你可以用MSBuildTools安装WebApplication重定向。只需转到这个页面,下载MSBuild 2017工具,在安装时单击Web开发构建工具,即可安装这些目标:

这将导致默认情况下在C:\Program Files (x86)\Microsoft VisualStudio\ 2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications中安装缺失的库

使用命令行

免责声明:我没有测试过以下任何建议

正如@PaulHicks和@WaiHaLee在评论中建议的那样,它也可以从CLI以无头模式(没有ui)安装,这实际上可能是解决移除服务器问题的更好方法。

解决方案A -使用包管理器(choco)

choco install visualstudio2017-workload-webbuildtools

解决方案B -运行安装程序在无头模式 请注意,这是在原始答案中建议使用的相同安装程序

vs_BuildTools.exe --add Microsoft.VisualStudio.Workload.WebBuildTools --passive

其他回答

如果没有安装VS,则不支持构建和发布wap。也就是说,如果你真的不想安装VS,那么你需要复制%ProgramFiles32%\MSBuild\Microsoft\下的所有文件。

您还需要安装Web部署工具。我想就是这样了。

新版msbuild似乎没有附带Microsoft.WebApplication.targets。要修复你需要更新你的csproj文件,如下所示:

1)编辑web应用程序csproj(右键单击)。在csproj的底部找到关于构建工具的部分。应该是这样的。

<PropertyGroup>  
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
</PropertyGroup>  
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />  
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />  
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />  

2)你需要在VisualStudioVersion标签下面添加一个VSToolsPath行,这样看起来就像这样

<PropertyGroup>  
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  <!--Add the below line to fix the project loading in VS 2017 -->
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  <!--End -->
</PropertyGroup>  
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />  
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />  
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />  

参考链接: https://alastaircrabtree.com/cannot-open-vs-2015-web-project-in-vs-2017/

根据这篇文章,你可以简单地下载Microsoft Visual Studio 2010 Shell (Integrated) Redistributable Package并安装目标。

这避免了在构建服务器上安装Visual Studio的需要。

我刚刚尝试了这一点,现在可以验证它的工作:

之前:

错误MSB4019:导入项目“C:\Program Files . 微软(x86) \ [\ \ VisualStudio \ v10.0 \ WebApplications \ Microsoft.WebApplication.targets” 没有找到。确认声明中的路径为 正确,并且该文件存在于磁盘上。

安装后:

(构建正确)

显然,这是比在构建服务器上安装Visual Studio更好的解决方案。

在build/CI服务器上构建时,通过指定/p:VSToolsPath= "来完全关闭Microsoft.WebApplication.targets的导入。这将从本质上使下面一行的条件为假:

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

在TeamCity中是这样做的:

如果将Visual Studio 2012迁移到2013,则打开*。Csproj项目文件编辑器。 并检查'Project'标签的ToolsVersion元素。

将其值从4.0更改为12.0

从 <?XML版本="1.0"编码="utf-8"?> <Project ToolsVersion="4.0"… 来 <?XML版本="1.0"编码="utf-8"?> <Project ToolsVersion="12.0"…

或者如果你用msbuild构建,那么只需指定VisualStudioVersion属性

msbuild / p: VisualStudioVersion = 12.0

解决方案的来源