84

首先是一些背景。在 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 并且不使用它,但我希望有比这更干净的东西。

4

11 回答 11

116

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

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

编辑 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.

于 2013-11-07T01:43:13.850 回答
55

如果你的构建服务器没有安装 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.1targets.x.x.x.x当前版本。

于 2014-10-28T03:07:44.030 回答
23

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

转到以下路径:

C:\Program 文件 (x86)\MSBuild\Microsoft\VisualStudio

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

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

你的问题应该得到解决。

于 2015-04-15T10:49:29.337 回答
12

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

于 2014-11-11T07:22:13.653 回答
8

哇。我们刚刚看到在我们的构建机器上发生了同样的事情。我们使用 VS2010 并以 .NET 4.0 为目标。我们的项目文件显式地导入了这些目标的 v10.0 版本。没有更改代码,昨天构建很好,今天它失败了,抱怨缺少 v11.0 版本。昨晚在这台构建机器上安装/更新了 .NET Framework 4.5.1 作为自动更新。我们将使用参数(或环境变量)强制 v10.0,但这肯定让我们感到惊讶......

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

Format Version 12.00

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

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

于 2014-01-15T16:57:51.753 回答
6

我遇到过同样的问题。通过上面列出的解决方案进行修复。出现此问题的原因是构建服务器上没有适当版本的 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')" />

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

干杯,

于 2017-12-15T07:55:31.003 回答
3

Hack,但通过复制解决了它: c:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications*.* 到 c:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0 \Web应用程序*.*

于 2014-02-28T10:14:16.997 回答
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 从未存在过。

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

引流

乔纳斯

于 2013-12-12T08:30:17.847 回答
0

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

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

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

于 2013-11-04T21:36:58.400 回答
0

当我在寻找如何解决这个问题时,几乎每个人都建议要么复制丢失的 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
于 2017-03-08T10:50:36.513 回答
0

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

<ItemGroup>
  <ProjectToBuild Include="$(MSBuildProjectDirectory)\..\MySolution.sln">
    <Properties>Configuration=$(BuildConfiguration);WarningLevel=0;VisualStudioVersion=12.0</Properties>
  </ProjectToBuild>
</ItemGroup>
<MSBuild Projects="@(ProjectToBuild)" Targets="Rebuild"/>
于 2016-04-13T09:47:11.353 回答