Msbuild 在生成服务器上未找到Microsoft.WebApplication.targets。什么';你的解决方案是什么?

Msbuild 在生成服务器上未找到Microsoft.WebApplication.targets。什么';你的解决方案是什么?,msbuild,.net-4.0,build-server,targets,dbproj,Msbuild,.net 4.0,Build Server,Targets,Dbproj,尝试在生成服务器上生成项目时出现以下错误: 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 pat

尝试在生成服务器上生成项目时出现以下错误:

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.
Microsoft(R)生成引擎版本4.0.30319.1
错误MSB4019:找不到导入的项目“C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.SqlTasks.targets”。确认声明中的路径正确,并且文件存在于磁盘上。
错误MSB4019:未找到导入的项目“C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets”。确认声明中的路径正确,并且文件存在于磁盘上。
错误MSB4019:未找到导入的项目“C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets”。确认声明中的路径正确,并且文件存在于磁盘上。
几个月前,我通过在构建服务器上安装VisualStudio2010解决了这个问题。但是现在我正在从头开始安装一台新服务器,我想知道是否有更好的解决方案来解决这个问题。

我在以下网站上找到了这个问题:

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


因此,这是我目前唯一的选择。

如果未安装VS,则不支持构建和发布WAP。话虽如此,如果确实不想安装VS,则需要复制
%ProgramFiles32%\MSBuild\Microsoft\
下的所有文件

您还需要安装。我想就是这样。

回答问题的标题(但不是关于您获得的输出的问题):

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

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


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

除Microsoft.WebApplication.targets和Microsoft.Data.Schema.SqlTasks.targets的最新Windows SDK外,如上所述,最新的Windows SDK应该可以减少安装Visual Studio 2010的需要。然而,安装VS 2010实际上可能不太容易下载,最终的工作量也会减少。

基于此,您只需下载并安装目标即可

这避免了在生成服务器上安装Visual Studio的需要

我现在刚刚尝试过,可以验证它是否有效:

之前:

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

安装后:

[正确构建]


显然,这是一个比在构建服务器上安装VisualStudio好得多的解决方案

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

如果您不希望修改build server上的任何内容,并且仍然希望在源代码管理的基础上构建项目,那么最好将所需的二进制文件置于源代码管理之下。您需要修改项目文件中的“导入”部分,使其如下所示:

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

第一行是相对于解决方案目录的新位置的实际导入。第二个是原始行的关闭版本(<代码>条件=“false”/代码>),它允许VisualStudio仍然认为您的项目是有效的Web应用程序项目(这是VS 2010 SP1本身的诀窍)。p>
不要忘记将
C:\Program Files(x86)\Microsoft\VisualStudio\v10.0\WebApplications
复制到源代码管理下的
BuildTargets
文件夹中。

您也可以使用NuGet包,在Visual Studio项目中引用它们,然后按照Andrey K的建议更改引用。

通过NuGet添加依赖项并设置构建参数 目标:无需更改/安装生成代理程序

我采用了一种基于

原因是我希望能够添加新的构建代理,而不必使用这样的项对它们进行预配置

  • 在具有Visual Studio的计算机上,打开解决方案;忽略web项目失败
  • 在NuGet包管理器中,添加,如Lloyd所述
  • 这将把二进制文件解析为
    [solution]\packages\MSBuild.Microsoft.VisualStudio.Web.targets.nn.n.n.n\tools\VSToolsPath\
  • 您可以将其复制到引用文件夹并提交
  • 或者只是在它们所在的地方使用它们。我选择了这个,但是我以后必须处理路径中的版本号
  • 在版本7中,我做了以下操作。这可能没有必要,根据评论,现在绝对不需要。请看下面的评论

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

  • 这就是你所需要的。只有103MB。不要全部安装


    我的解决方案是这里几种答案的混合

    我检查了构建服务器,并且已经安装了Windows7/NET4.0 SDK,因此我找到了路径:

    C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets`

    然而,在这方面:

    $(MSBuildExtensionsPath)扩展到C:\Program Files\MSBuildwh
    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" ...
    
    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="12.0" ...
    
    <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
    
    <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" />  
    
    <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" />  
    
    choco install visualstudio2017-workload-webbuildtools
    
    vs_BuildTools.exe --add Microsoft.VisualStudio.Workload.WebBuildTools --passive
    
    <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" />
    <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
    
    <Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
    <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
    
    <?xml version="1.0" encoding="utf-8"?>
    <Project Sdk="MSBuild.Sdk.SqlProj/1.0.0">
      <PropertyGroup>
        <SqlServerVersion>Sql140</SqlServerVersion>
        <TargetFramework>netstandard2.0</TargetFramework>
      </PropertyGroup>
    </Project>