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

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解决了这个问题。但是现在我从头开始安装一个新的服务器,我想知道是否有更好的解决方案来解决这个问题。


当前回答

来这里参加Visual Studio 2017的人。我也有类似的问题,更新到15.6.1后无法编译项目。 我不得不安装MSBulild工具,但错误仍然存在。

通过将v14.0文件夹从C:\Program Files (x86)\MSBuild\Microsoft\ VisualStudio复制到与v15.0相同的文件夹,我能够解决这个问题,这解决了所有错误。 现在我的文件夹结构如下所示,其中两个文件夹包含相同的内容。

其他回答

After installation of MSBuild tools from Microsoft, define the MSBuild path in the environment variable, so that it can be run from any path. Edit the .csproj file in any notepad editor such as notepad++, and comment the Check for the following elements, --> Make sure you use import only once, choose whichever works. Make sure you have the following folder exists on the drive, "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0" or whichever version is referenced by MSBuild target at "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications\Microsoft.WebApplication.targets" From the command prompt, run the following command, to check

C: > msbuild“C: \ \ DotnetCi。/p:Configuration=Release /p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=false

根据需要选择/p开关,请参考此处输入链接说明 在这里输入图像描述

回答问题的标题(而不是你得到的输出的问题):

如果只是web应用程序,将以下文件夹从开发机器复制到构建服务器可以修复此问题

C:\Program Files (x86)\MSBuild\Microsoft\ VisualStudio\v10.0\WebApplications

根据构建中断的方式删除x86。如果你有其他项目类型,你可能需要复制整个msbuild文件夹。

我通过在docker容器中运行构建来解决这个问题,特别是dotnet/framework/sdk。它包括VS构建工具。

UPD:从VS2017开始,构建工具中的工作负载完全消除了这个问题。见@SOReader的答案。

如果您不希望在构建服务器上修改任何内容,并且仍然希望在源代码控制之外构建项目,那么将所需的二进制文件置于源代码控制之下可能是一个好主意。你需要修改项目文件中的imports部分,如下所示:

<Import Project="$(SolutionDir)\BuildTargets\WebApplications\Microsoft.WebApplication.targets" />
<Import Condition="false" Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

第一行是从相对于解决方案目录的新位置实际导入的。第二个是关闭的版本(Condition="false"),它允许Visual Studio仍然认为您的项目是一个有效的Web应用程序项目(这是VS 2010 SP1自己做的技巧)。

不要忘记将C:\Program Files (x86)\Microsoft\ VisualStudio\v10.0\WebApplications复制到源代码控制下的BuildTargets文件夹。

如果你试图使用VSTS部署一个项目,那么问题可能与检查“托管的Windows容器”选项而不是“托管的VS2017”(或18等)有关: