未找到Microsoft.WebApplication.targets,在生成服务器上。您有什么解决方案?

问题描述 投票:397回答:20

[尝试在构建服务器上构建项目会给我以下错误:

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

msbuild .net-4.0 build-server targets dbproj
20个回答
204
投票

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

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

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

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


14
投票

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

将其值从4.0更改为12.0

  • 来自

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

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

或者如果您使用msbuild进行构建,则只需指定VisualStudioVersion属性

msbuild /p:VisualStudioVersion=12.0

Solution Source


9
投票

似乎新版本的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/


8
投票

这就是您所需要的。只有103MB。不要安装所有内容

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9GRW52Si5wbmcifQ==” alt =“在此处输入图像描述”>


5
投票

我在MS connect上找到了这个:

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

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


2
投票

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

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

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

但是,在此行:

]

$(MSBuildExtensionsPath)扩展为没有路径的C:\ Program Files \ MSBuild

因此,我要做的是使用此命令创建符号链接:

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

这样,$(MSBuildExtensionsPath)可以扩展到有效路径,而无需在应用程序本身中进行任何更改,仅需要在构建服务器中进行更改(也许可以在每个构建中创建符号链接,以确保这一步不会丢失,并且可以“已记录”)。


2
投票

我通过添加来解决此问题/p:VCTargetsPath="C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V120"进入Build > Build a Visual Studio project or solution using MSBuild > Command Line Arguments


2
投票

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

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

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


2
投票

[所有人都来这里参加Visual Studio2017。我遇到了类似的问题,并且在更新到15.6.1后无法编译项目。我必须安装MSBulild工具,但仍然存在错误。

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

enter image description here


1
投票

如果您使用的是MSBuild,例如构建服务器,对我有用的是:

更改以下内容:

<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)' != ''" />

我的Msbuild命令是:*"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" solution.sln /p:Configuration=Debug /p:Platform="Any CPU"*

希望这对某人有帮助。


0
投票

[如果您尝试使用VSTS部署项目,则问题可能与检查“托管Windows容器”选项而不是“托管VS2017”(或18等)有关。

enter image description here


95
投票

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

您还将需要安装Web Deploy Tool。我认为就是这样。


0
投票
  • 从Microsoft安装MSBuild工具后,在环境变量中定义MSBuild路径,以便可以从任何路径运行它。
  • [在任何记事本编辑器(如notepad ++中编辑.csproj文件,并注释]
  • 检查以下元素,->
    • 确保仅使用一次导入,选择任何可行的方法。
    • 请确保驱动器上存在以下文件夹“ C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v14.0”或MSBuild目标在“ C:\ Program Files( x86)\ MSBuild \ Microsoft \ VisualStudio \ v14.0 \ WebApplications \ Microsoft.WebApplication.targets“
    • 在命令提示符处,运行以下命令,进行检查

C:> msbuild“ C:\\ DotnetCi.sln” / p:配置=发布/ p:UseWPP_CopyWebApplication = true / p:PipelineDependsOnBuild = false


75
投票

UPD:从VS2017开始,构建工具中的工作负载已完全消除了此问题。参见@SOReader answer

如果不想在构建服务器上进行任何修改,而您仍然希望直接从源代码控制中构建项目,则最好将所需的二进制文件置于源代码控制之下。您需要修改项目文件中的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文件夹。


68
投票

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


66
投票

现在,在2017年,您可以使用MSBuildTools安装WebApplication redist。只需转到将下载MSBuild 2017工具的this page,然后在安装时单击Web development build tools即可安装以下目标:enter image description here

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


54
投票

基于this post here,您只需下载Microsoft Visual Studio 2010 Shell (Integrated) Redistributable Package并安装目标。

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

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

之前:

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

安装后:

[正确构建]

显然,这比在生成服务器上安装Visual Studio更好。


38
投票

如上所述,除了用于Microsoft.WebApplication.targets的"Microsoft Visual Studio 2010 Shell (Integrated) Redistributable Package"和用于Microsoft.Data.Schema.SqlTask​​s.targets的"Microsoft Visual Studio Team System 2008 Database Edition GDR R2"之外,最新的Windows SDK还可以减轻安装Visual Studio 2010的需要。实际上,安装VS 2010可能会减少总体下载量,最终减少工作量。


20
投票

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

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

这是在TeamCity中完成的方法:

enter image description here


17
投票

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

目标:无需更改/无需构建代理安装

我对NuGet approach by Lloyd here采用了混合方法,该方法基于committing binary dependencies solution by Andrik.

我之所以希望能够添加新的构建代理,而不必使用诸如此类的项目对其进行预配置。

  1. 在装有Visual Studio的计算机上,打开解决方案;忽略该Web项目失败。
  2. [如Lloyd所述,在NuGet包管理器中,添加MSBuild.Microsoft.VisualStudio.Web.targets
  3. 这会将二进制文件解析为[solution]\packages\MSBuild.Microsoft.VisualStudio.Web.targets.nn.n.n.n\tools\VSToolsPath\
    1. 您可以将它们复制到引用文件夹并提交,
    2. 或只是在它们所在的地方使用它们。我选择了这个,但是稍后我将不得不处理路径中的版本号。

在版本7中,我执行了以下操作。这可能不是必需的,并且现在绝对不需要基于注释。请参阅下面的评论。

  1. 接下来,在TeamCity构建配置中,为env.VSToolsPath添加一个构建Paramenter,并将其设置为VSToolsPath文件夹;我使用了..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath
© www.soinside.com 2019 - 2024. All rights reserved.