首先是一些背景。在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而不是使用它,但我希望能有一些比这更清洁的东西。
答案 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文件夹来解决了这个问题。
我的猜测是,这可能发生在两个方面:
更新了一些内容,触发了v11文件夹的删除。它可能是.NET的Windows更新还是什么?
更新了一些东西,将我的TeamCity / MSBuild配置从使用v10更改为v11,并且构建停止工作,因为v11从未存在过。
我在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