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

学向勤中得,萤窗万卷书。这篇文章主要讲述当文件实际引用v10时,找不到v11.0WebApplicationsMicrosoft.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版本:
【当文件实际引用v10时,找不到v11.0WebApplicationsMicrosoft.WebApplication.targets】右键单击 - > “编辑构建定义...”
转到“处理” - > “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) MSBuildMicrosoftVisualStudio
您将看到最新版本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) MSBuildMicrosoftVisualStudiov10.0WebApplications *。*到c: Program Files(x86) MSBuildMicrosoftVisualStudiov11.0web应用*。*
另一答案我在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软件包。在我的情况下,只有版本足以解决问题。

    推荐阅读