v11.0 \ WebApplications \ Microsoft.WebApplication.targets在文件实际引用v10时未find

首先是一些背景。 在2012年底,我们将vs2008解决scheme迁移到vs2010,但我们仍然瞄准.NET 3.5。 (我什么都不知道,只是这里最新最好的!)

直到几个星期前,当人们开始发现这些错误时,我们没有发现任何问题:

"foo.csproj" (Rebuild target) (16:5) -> C:\...\foo.csproj(142,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.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。

这个错误一次,甚至在几个月前没有改变的旧的代码分支上。

我怀疑有些更新被推到了我们的机器上,但是我不知道该怎么做。

短期的解决scheme是安装VS 2012,不使用它,但我希望有一些比这更干净的东西。

我遇到了与Visual Studio 2013相同的问题。事实certificate,我正在使用命令行中MSBuild的旧版本(与.NET Framework一起提供的版本)。 微软现在发布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)\MSBuild\12.0\Bin的新版本的MSBuild.exe。 一旦我这样做,所有的目标错误消失。

编辑1

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

编辑2

如注释中所述,对于Visual Studio 2017,请使用C:\Program Files (x86)\Microsoft Visual Studio\2017\<Edition>\MSBuild\15.0\Bin\MSBuild.exe

如果你有一个没有安装VS2012的生成服务器,你可以通过修复这个

a)将MSBuild.Microsoft.VisualStudio.Web.targets包安装到您的解决scheme中

b)在.csproj文件中replace这一行:

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

用这行指向nuget包

 <Import Project="..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets" Condition="true" /> 

编辑

由于@joedragons指出更新行中的版本应该与nuget软件包版本匹配,即将target.11.0.2.1replace为当前版本的targets.xxxx

这个问题的简单解决scheme:

转到以下path:

C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio

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

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

你的问题应该得到解决。

我发现安装免费的Visual Studio 2012 Shell(独立)安装WebApplications v11 MSBuild文件。 比完整安装的Visual Studio 2012更轻,不需要许可证。

哇。 我们刚刚在构build机器上看到了同样的情况。 我们使用VS2010和目标.NET 4.0。 我们的项目文件显式地导入了这些目标的v10.0版本。 在没有修改代码的情况下,昨天的版本没有问题,而且今天也没有任何关于缺lessv11.0版本的投诉。 .NET Framework 4.5.1昨晚在这个构build机器上安装/更新为自动更新。 我们将强制使用参数(或环境variables)的v10.0,但这当然让我们感到惊讶…

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

 Format Version 12.00 

我们手动testing,将其更改为11.00,并且构build再次开始工作。

在我们的例子中,尽pipe我们的目标是build立2010 / 4.0的一切,但一些开发者已经准备好了VS2012(因为MS宣称项目文件是兼容的),而这个特定的解决scheme最后被保存了(几个月前) VS2012。 在今天之前,这并没有造成问题。

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

我在11月底得到了这个错误,没有对TeamCity安装或MSBuild安装的configuration或源代码进行任何更改。 在我的构build服务器上,甚至没有安装Visual Studio,并且在8月底从VS2010更改为VS2012时没有任何问题。

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

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

我的猜测是,这可能发生在两个方面:

  1. 更新了某些内容,触发了v11文件夹的删除。 它可能是一个Windows更新到.NET或什么?

  2. 更新的东西改变了我的TeamCity / MSBuildconfiguration从使用v10到v11,并且由于v11从来不存在,构build停止工作。

我已经在12月3日更新了.NET Framework 4.5.1,这可能是原因吗?

Brgds

乔纳斯

我最近陷入了同样的问题。 而我的结论是VS(v10,v11,v12)的每个版本都会更改构buildvariables的path,如MSBuildBinPath

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

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

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

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

正如我正在寻找如何解决这个问题,几乎每个人都build议要么复制丢失的MSBUILD文件夹,要么安装一些版本的SDK。

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

简而言之,这个想法是configuration你的构build应该在你的构build定义中使用的VisualStudio版本:

右键点击 – >“编辑构build定义…”

转到“Procss” – >“3.高级”

并设置“MSBuild Arguments”

 /p:VisualStudioVersion=12.0