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

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


当前回答

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

其他回答

通过NuGet添加依赖项并设置一个构建参数

目标:对构建代理没有必要的更改/安装

我在这里采用了Lloyd的NuGet方法的混合方法,该方法基于Andrik的提交二进制依赖解决方案。

原因是我希望能够添加新的构建代理,而不需要使用诸如此类的项预先配置它们。

在机器上用Visual Studio打开解决方案;忽略web项目失败。 在NuGet包管理器中,添加MSBuild.Microsoft.VisualStudio.Web。目标,正如Lloyd提到的。 这将把二进制文件解析为[solution]\packages\ msbuild . microsoft . visualstudio . web .target .nn.n.n.n\tools\VSToolsPath\ 你可以把这些复制到引用文件夹并提交, 或者就在它们所在的地方使用它们。我选择了这个,但是稍后我将不得不处理路径中的版本号。

在版本7中,我执行了以下操作。这可能是不必要的,根据评论,现在肯定不需要了。请看下面的评论。

接下来,在TeamCity构建配置中,为env添加一个构建参数。VSToolsPath并将其设置为VSToolsPath文件夹;我使用的是..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath

我在MS connect上找到了这个:

是的,您需要安装Visual Studio 2010在你的构建机器上进行构建 数据库项目。这样做确实 不需要额外的许可证 Visual Studio。

所以,这是我目前唯一的选择。

创建一个新项目并复制设置可能会提供最好的指导。这是我戴上的样子

  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  </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" />

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

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

我尝试了很多解决方案,但最后这个答案对我有用:https://stackoverflow.com/a/19826448/431522

它基本上需要从MSBuild目录调用MSBuild,而不是Visual Studio目录。

我还将MSBuild目录添加到我的路径中,以使脚本更容易编码。