当文件实际引用v10时,找不到v11.0 WebApplications Microsoft.WebApplication.targets

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当文件实际引用v10时,找不到v11.0 WebApplications Microsoft.WebApplication.targets相关的知识,希望对你有一定的参考价值。

首先是一些背景。在2012年底,我们将vs2008解决方案迁移到了vs2010,但我们仍然以.NET 3.5为目标。 (我只知道最新最好的!)

几周前,当人们开始收到这些错误时,我们对此设置没有任何问题:

"foo.csproj" (Rebuild target) (16:5) ->
  C:...foo.csproj(142,3): error MSB4019: The imported project "C:Program Files (x86)MSBuildMicrosoftVisualStudiov11.0WebApplicationsMicrosoft.WebApplication.targets" was not found. Confirm that the path in the declaration is correct, and that the file exists on disk.

有趣的是,如果你查看项目文件,它引用v10是有道理的,因为我们不使用Visual Studio 2012。

这个错误立刻打击了我们几个人,甚至在几个月没有改变的旧代码分支上。

我怀疑一些更新被推到我们的机器上,这让事情变得混乱,但我不知道该怎么做。

短期的解决方案是安装VS 2012而不是使用它,但我希望有一些比这更清洁的东西。

答案

我遇到了与Visual Studio 2013相同的问题。事实证明,我从命令行使用旧版本的MSBuild - .NET Framework附带的版本。 Microsoft现在将MSBuild作为Visual Studio本身的一部分发布,也作为单独的安装程序(http://blogs.msdn.com/b/visualstudio/archive/2013/07/24/msbuild-is-now-part-of-visual-studio.aspx)发布。

解决方案是使用位于C:Program Files (x86)MSBuild12.0Bin的新版MSBuild.exe。一旦我这样做,所有目标错误都消失了。

编辑1

正如评论中所提到的,MSBuild的每个新版本都带有一个新目录。对于Visual Studio 2015,请使用C:Program Files (x86)MSBuild14.0Bin

编辑2

如评论中所述,对于Visual Studio 2017,请使用C:Program Files (x86)Microsoft Visual Studio2017<Edition>MSBuild15.0BinMSBuild.exe

另一答案

您可以像这样添加VisualStudioVersion属性:

<ItemGroup>
  <ProjectToBuild Include="$(MSBuildProjectDirectory)..MySolution.sln">
    <Properties>Configuration=$(BuildConfiguration);WarningLevel=0;VisualStudioVersion=12.0</Properties>
  </ProjectToBuild>
</ItemGroup>
<MSBuild Projects="@(ProjectToBuild)" Targets="Rebuild"/>
另一答案

当我在搜索如何解决这个问题时,几乎所有人都建议复制丢失的MSBUILD文件夹或安装某些版本的SDK。

幸运的是,我发现了Donovan Brown的这篇非常有用的文章:http://donovanbrown.com/post/So-sick-of-MicrosoftWebApplicationtargets-was-not-found-build-errors!

简而言之,我们的想法是配置构建应在构建定义中使用的VisualStudio版本:

右键单击 - >“编辑构建定义...”

转到“处理” - >“3。高级”

并设置“MSBuild Arguments”

/p:VisualStudioVersion=12.0
另一答案

如果您的构建服务器没有安装VS2012,则可以通过此方法解决此问题

a)将MSBuild.Microsoft.VisualStudio.Web.targets软件包安装到您的解决方案中,并且

b)替换.csproj文件中的这一行:

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

这条线指向nuget包

<Import Project="..packagesMSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1	oolsVSToolsPathWebApplicationsMicrosoft.WebApplication.targets" Condition="true" />

编辑

正如@joedragons指出更新行中的版本应与nuget包版本匹配,即将targets.11.0.2.1替换为当前版本的targets.x.x.x.x

另一答案

这个问题的简单解决方案:

转到以下路径:

C: Program Files(x86) MSBuild Microsoft VisualStudio

您将看到最新版本V10.0,v11.0,v12.0,具体取决于您的Visual Studio 2010,2012或2013安装。

从最新版本目录复制WebApplications文件夹并粘贴到其他目录。

你的问题应该得到解决。

另一答案

我发现安装免费的Visual Studio 2012 Shell (Isolated)会安装WebApplications v11 MSBuild文件。比完整安装的Visual Studio 2012更轻,没有许可问题。

另一答案

哇。我们刚刚在构建机器上看到了同样的事情。我们使用VS2010并以.NET 4.0为目标。我们的项目文件显式导入这些目标的v10.0版本。由于没有对代码进行任何更改,昨天构建很好,今天它失败了对丢失的v11.0版本的投诉。 .NET Framework 4.5.1昨晚在此构建计算机上安装/更新为自动更新。我们将使用参数(或env。变量)强制v10.0,但这确实让我们感到惊讶......

更新:更奇怪的是,似乎今天的msbuild版本似乎是使用sln文件的第一行来确定默认使用哪个VisualStudioVersion,而昨天的版本没有:

Format Version 12.00

我们测试手动将其更改为11.00并且构建再次开始工作。

在我们的例子中,即使我们针对2010 / 4.0的目标并构建一切,一些开发人员已经为VS2012做好了准备(因为MS声称项目文件是兼容的),并且这个特定的解决方案最后保存(几个月前) VS2012。在今天之前,这并没有造成问题。

另一答案

我遇到过同样的问题。通过上面列出的解决方案修复。导致该问题的原因是构建服务器上没有适当版本的Visual Studio工具(BuildTools)。正如上面正确指出的那样,这可以通过安装BuildTools来解决,但在我的情况下不是选项。

这是另一种选择 - 使用Nuget

Install-Package MSBuild.Microsoft.VisualStudio.Web.targets -Version 14.0.0.3

确定启动项目并根据正在使用的Visual Studio版本安装web.targets。将修改以下文件,其中包括所需的更改

在packages.config中:

<package id="MSBuild.Microsoft.VisualStudio.Web.targets" version="14.0.0.3" targetFramework="net45" />

在.csproj中:

<Import Project="..packagesMSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3uildMSBuild.Microsoft.VisualStudio.Web.targets.props" Condition="Exists('..packagesMSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3uildMSBuild.Microsoft.VisualStudio.Web.targets.props')" />

希望这可以帮助!!!祝好运,

干杯,

另一答案

Hack,但通过复制来解决它:c: Program Files(x86) MSBuild Microsoft VisualStudio v10.0 WebApplications *。*到c: Program Files(x86) MSBuild Microsoft VisualStudio v11.0 web应用*。*

另一答案

我在11月底遇到了这个错误,没有对我的TeamCity安装或MSBuild安装的配置或源代码进行任何更改。在我的构建服务器上,Visual Studio甚至没有安装,从VS2010到VS2012的更改是在8月底完成的,当时没有任何问题。

我的MSBuild版本是4.0.30319.18408,我的构建服务器是带有TeamCity v6.5.3的Windows Server 2008 R2 SP1。

我通过简单地从另一个不受影响的构建服务器复制v11文件夹来解决了问题。

我猜这可能发生在两个方面:

  1. 有些内容已更新,触发了v11文件夹的删除。它可能是.NET的Windows更新吗?
  2. 有些内容已更新,这使我的TeamCity / MSBuild配置从使用v10更改为v11,并且构建停止工作,因为v11从未存在过。

我在12月3日得到了.NET Framework 4.5.1的更新,可能是这个原因吗?

Brgds

乔纳斯

另一答案

我最近遇到了同样的问题。我的结论是每个版本的VS(v10,v11,v12)都会改变构建变量的路径,比如MSBuildBinPath

因此,指定VS的确切版本不是黑客,因为您可能甚至没有安装适当版本的文件。因此,您最好指定一个参数并使用您机器上存在的目标。

在极少数情况下,您可能需要安装特定版本的VS和Web Deploy软件包。在我的情况下,只有版本足以解决问题。

以上是关于当文件实际引用v10时,找不到v11.0 WebApplications Microsoft.WebApplication.targets的主要内容,如果未能解决你的问题,请参考以下文章

找不到USB硬件/blaster驱动程序

System.Web.Optimization找不到引用

JSONDecoder 找不到存在的密钥

怎样在c#程序中引用system.web.UI为啥我找不到这个引用

找不到端点异常 - WCF Web 服务

找不到端点异常 - WCF Web 服务