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

时间:2013-07-02 19:12:30

标签: asp.net .net visual-studio-2010 visual-studio-2008 visual-studio-2012

首先是一些背景。在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)\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.

这个错误同时影响了我们中的几个人,甚至在几个月内没有改变的旧代码分支上。

我怀疑某些更新被推到了我们的机器上,这让我感到困惑,但我不知道该怎么办。

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

11 个答案:

答案 0 :(得分:111)

我遇到了与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)\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

答案 1 :(得分:50)

如果您的构建服务器未安装VS2012,则可以通过

解决此问题

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

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

<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包版本匹配,即将targets.11.0.2.1替换为当前版本的targets.x.x.x.x

答案 2 :(得分:23)

解决此问题的简单方法:

转到以下路径:

  

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

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

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

您的问题应该得到解决。

答案 3 :(得分:9)

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

答案 4 :(得分:8)

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

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

Format Version 12.00

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

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

答案 5 :(得分:5)

我有同样的问题。通过上面列出的解决方案修复。导致该问题的原因是构建服务器上没有适当版本的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="..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3\build\MSBuild.Microsoft.VisualStudio.Web.targets.props" Condition="Exists('..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3\build\MSBuild.Microsoft.VisualStudio.Web.targets.props')" />

希望这会有所帮助!!!祝你好运,

干杯,

答案 6 :(得分:3)

哈克,但通过复制解决了它: c:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications *。* 至 c:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ WebApplications *。*

答案 7 :(得分:1)

我在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从未存在过。

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

    Brgds

    纳斯

答案 8 :(得分:0)

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

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

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

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

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

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

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

右键单击 - &gt; “编辑构建定义......”

转到“Procss” - &gt; “3.高级”

并使用

设置“MSBuild Arguments”
/p:VisualStudioVersion=12.0