在构build服务器上找不到Microsoft.WebApplication.targets。 你的解决scheme是什么?

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

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

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

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

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

根据您的构build中断方式来移除x86。 如果你有其他的项目types,你可能需要复制整个msbuild文件夹。

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

您还需要安装Web部署工具 。 我想是的。

如果您不想修改构build服务器上的任何内容,并且仍希望项目能够直接从源代码pipe理中进行构build,那么将所需的二进制文件置于源代码pipe理之下可能是一个好主意。 您需要修改项目文件中的imports部分,如下所示:

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

第一行是相对于解决scheme目录的新位置的实际导入。 第二个是原始行的closures版本( Condition="false" ),它允许Visual Studio将项目视为有效的Web应用程序项目(这是VS 2010 SP1本身的技巧)。

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

基于这篇文章,您可以简单地下载Microsoft Visual Studio 2010 Shell(集成)可再发行组件包,并安装目标。

这样可以避免在构build服务器上安装Visual Studio。

我刚刚试过这个,可以validation它的工作原理:

之前:

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

安装完成后:

[正确构build]

这显然比在构build服务器上安装Visual Studio要好得多。

您也可以使用NuGet包MSBuild.Microsoft.VisualStudio.Web.targets ,在Visual Studio项目中引用它们,然后按照Andriy K的build议更改参考。

如上所述,除了用于Microsoft.WebApplication.targets的“Microsoft Visual Studio 2010 Shell(集成)可再发行组件包”和用于Microsoft.Data.Schema的“Microsoft Visual Studio Team System 2008数据库版GDR R2”之外,最新的Windows SDK .SqlTask​​s.targets应该减轻安装Visual Studio 2010的需要。但是,安装VS 2010可能实际上是整体下载和减less工作。

通过NuGet添加依赖关系并设置生成参数

目标:构build代理不需要更改/安装

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

我之所以想要能够添加新的构build代理,而无需像这样预先configuration它们。

  1. 在装有Visual Studio的机器上,打开解决scheme; 忽略Web项目失败。
  2. 在NuGet包pipe理器中 ,像Lloyd提到的那样添加MSBuild.Microsoft.VisualStudio.Web.targets 。
  3. 这将解决二进制文件到[solution]\packages\MSBuild.Microsoft.VisualStudio.Web.targets.nn.nnn\tools\VSToolsPath\
    1. 您可以将这些复制到引用文件夹&提交,
    2. 或者只是在他们所在的地方使用它们。 我select了这个,但是我将不得不在后面的path中处理版本号。
  4. 接下来,在您的TeamCity构buildconfiguration中,为env.VSToolsPath添加一个构build参数,并将其设置为VSToolsPath文件夹; 我用..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath

当我在维护方面达到我认为最好的状态,并且能够启动新的构build代理时,我会更新这篇文章。

在构build/ CI服务器上构build时,通过指定/p:VSToolsPath=''closuresMicrosoft.WebApplication.targets的导入。 这基本上会使下面一行的条件成为错误:

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

TeamCity中就是这么做的:

在这里输入图像说明

如果将Visual Studio 2012迁移到2013,则使用edior打开* .csproj项目文件。
并检查“Project”标签的ToolsVersion元素。

将其值从4.0更改为12.0

  •  <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" ... 
  •  <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="12.0" ... 

或者,如果您使用msbuild构build,那么只需指定VisualStudioVersion属性即可

msbuild /p:VisualStudioVersion=12.0

解决scheme来源

这是你所需要的。 只有103MB。 不要安装所有东西

在这里输入图像说明

我发现这在MS连接 :

是的,您需要在生成计算机上安装Visual Studio 2010来构build数据库项目。 这样做不需要额外的Visual Studio许可证。

所以,这是我现在唯一的select。

看来msbuild的新版本不附带Microsoft.WebApplication.targets。 要解决你需要更新你的csproj文件,如下所示:

1)编辑Web应用程序csproj(右键单击)。 在csproj中查找关于构build工具的底部。 它应该是这样的。

 <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/

我的解决scheme是这里几个答案的组合。

我检查了构build服务器,并已安装Windows7 / NET4.0 SDK,所以我find了path:

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

但是,在这一行上:

<Import Project =“$(MSBuildExtensionsPath)\ Microsoft \ VisualStudio \ v9.0 \ WebApplications \ Microsoft.WebApplication.targets”/>

$(MSBuildExtensionsPath)扩展到C:\ Program Files \ MSBuild没有path。

因此我所做的就是使用这个命令创build一个符号链接:

mklink / J“C:\ Program Files \ MSBuild \ Microsoft \ VisualStudio”“C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio”

这样$(MSBuildExtensionsPath)扩展到一个有效的path,不需要在应用程序本身进行任何更改,只有在构build服务器(也许可以创build每个构build的符号链接,以确保此步骤不会丢失,并“logging“)。

我通过添加解决这个问题
/p:VCTargetsPath="C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V120"


Build > Build a Visual Studio project or solution using MSBuild > Command Line Arguments

我尝试了一堆解决scheme,但最终这个答案为我工作: https : //stackoverflow.com/a/19826448/431522

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

我也添加了MSBuild目录到我的path,使脚本更容易编码。

现在,在2017年,您可以使用MSBuildTools安装WebApplication redists。 只要到这个页面下载MSBuild 2017 Tools,安装时点击Web development build tools也可以安装这些目标: 在这里输入图像说明

这将导致默认安装C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications默认库

我已经成功地将我的开发机器中的文件复制到TFS。 他们应该住在两台机器的同一个地方。