缺少MSBuild 15 WebApplication.targets

时间:2017-11-02 13:58:41

标签: visual-studio msbuild

我正在使用使用VS2015编写的Web应用程序,并且正在使用VS2017进行维护。我正在尝试使用MSBuild API和其他工具编写另一个应用程序来在本地构建完整的Web堆栈。在VS2015或VS2017中,ASP.NET Web应用程序项目将成功构建,但在以编程方式运行MSBuild时,我不断收到此错误:

找不到导入的项目“C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v15.0 \ WebApplications \ Microsoft.WebApplication.targets”。确认声明中的路径是否正确,以及该文件是否存在于磁盘上。

我在我的应用中安装了以下构建包:

  • Microsoft.Build
  • Microsoft.Build.Framework
  • Microsoft.Build.Tasks.Core
  • Microsoft.Build.Utilities.Core

我在论坛中看到的关于此错误的标准建议是在构建服务器上安装Visual Studio,但我在本地执行此操作并且安装了Visual Studio。我还读到MSBuild 15没有附带WebApplication.targets文件。 toolsVersion的构造函数上还有一个Microsoft.Build.Execution.BuildRequestData参数,我尝试手动设置为14.0,但似乎我的应用程序仍在尝试使用MSBuild 15.(我确实有已安装MSBuild 14。)

问题:

  • 我是否可以在不更新任何csproj文件的情况下以编程方式在MSBuild 14中运行此构建?
  • 我在哪里可以获得MSBuild 15的WebApplication.targets

解决方案:

非常感谢@ Leo-MSFT我能够让这个工作。方法如下:

  1. 卸载VS2017 ASP.NET和Web应用程序开发工作负载,然后重新安装所有可选组件。这下载了缺少的 .targets 文件。
  2. 在我的构建器应用程序中,将此属性添加到我的BuildRequestData实例中,以使MSBuild查看v15使用的文件夹,而不是使用v14使用的文件夹。

    ["MSBuildExtensionsPath32"] = "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild"

1 个答案:

答案 0 :(得分:1)

  

我是否可以在不更新任何csproj文件的情况下以编程方式在MSBuild 14中运行此构建?

MSBuildExtensionsPath32由MSBuild在内部设置。如果您不想更新.csproj文件,可以尝试覆盖项目文件中的值:

  <PropertyGroup>
    <MSBuildExtensionsPath32>C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild</MSBuildExtensionsPath32>
  </PropertyGroup>

  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  </PropertyGroup>
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />

但我不确定是否会引入其他错误(未经测试)。

  

我在哪里可以获得MSBuild 15的WebApplication.targets?

MSBuild 15的WebApplication.targets路径为:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications