【问题标题】:MS-Build 2017 "Microsoft.WebApplication.targets " is missing缺少 MSBuild 2017“Microsoft.WebApplication.targets”
【发布时间】:2017-10-19 02:31:01
【问题描述】:

我正在尝试将我们的构建服务器 (jenkins) 从 Visual Studio 2015 升级到 2017。我们正在通过 MS-Build 构建。我已经按照answer 中的说明下载并安装了 MS-Buld 工具。如果我编译我的项目,我会收到一个错误,指出找不到 Microsoft.WebApplication.targets

详细错误:

 error MSB4226: The imported project "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications\Microsoft.WebApplication.targets"

我在 MS-Build 目录中进行了查找:

PS C:\Program Files (x86)\MSBuild> dir -Recurse -Filter "Microsoft.WebApplication.targets"


    Directory: C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications


Mode                LastWriteTime         Length Name                                                                                                                                                                                                            
----                -------------         ------ ----                                                                                                                                                                                                            
-a----       11.01.2012     00:23          19654 Microsoft.WebApplication.targets                                                                                                                                                                                


    Directory: C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications


Mode                LastWriteTime         Length Name                                                                                                                                                                                                            
----                -------------         ------ ----                                                                                                                                                                                                            
-a----       22.07.2013     01:25          19995 Microsoft.WebApplication.targets                                                                                                                                                                                


    Directory: C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications


Mode                LastWriteTime         Length Name                                                                                                                                                                                                            
----                -------------         ------ ----                                                                                                                                                                                                            
-a----       06.07.2015     21:55          20118 Microsoft.WebApplication.targets                                                                                                                                                                                


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


Mode                LastWriteTime         Length Name                                                                                                                                                                                                            
----                -------------         ------ ----                                                                                                                                                                                                            
-a----       22.07.2013     01:25          19995 Microsoft.WebApplication.targets

可以看出,旧编译器版本的文件存在,但对于 v15.0,它丢失了。

我还在构建服务器上安装了 Visual Studio 2017。如果我使用 Visual Studio 2017 编译,项目将成功构建。

任何提示如何解决这个问题?一种可能的解决方案是生成从C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications 指向旧v14.0 文件(位于C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications 下)的符号链接。

谢谢

【问题讨论】:

标签: visual-studio msbuild


【解决方案1】:

可能有多个问题导致此错误,但通常是由于缺少文件(下面是我的错误示​​例)。

Invalid project `C:\xxxxx\Web.Mvc.csproj`. The imported project "C:\Program Files\dotnet\sdk\5.0.403\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the expression in the Import declaration "C:\Program Files\dotnet\sdk\5.0.403\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets" is correct, and that the file exists on disk.  

对于我自己,我正在使用dotnet 命令通过powershell 构建一个.NET 4.8 解决方案,针对VS2019 运行。在 VS2010/15/17 中创建的失败项目。

因此,为了解决丢失的文件,我只是在它正在寻找的文件和它预期的位置之间创建了一个符号链接。

mklink /J "C:\Program Files\dotnet\sdk\5.0.403\Microsoft\VisualStudio" "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VisualStudio"

这解决了问题,现在我可以以编程方式构建解决方案(这也应该适用于其他实例,前提是您使用正确的文件路径来制作符号链接)。

【讨论】:

    【解决方案2】:

    对于 VS 2019,我通过复制解决了这个问题:

    C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VisualStudio\v16.0

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

    【讨论】:

    • VS2019如何获取C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0
    【解决方案3】:

    我只是用Visual Studio Installer更新Visual Studio Community 2017,问题就解决了。

    【讨论】:

      【解决方案4】:

      您似乎缺少“Web 开发构建工具”的工作负载:Microsoft.VisualStudio.Workload.WebBuildTools

      您可以通过从here (VS2017) 或here (VS2019) 下载构建工具安装程序然后运行来安装它

      vs_buildtools.exe --add Microsoft.VisualStudio.Workload.WebBuildTools
      

      或打开vs_buildtools.exe 并在GUI 中选择“Web 开发构建工具”组件:

      【讨论】:

      • 我如何运行这个命令它给出的“vs_buildtools.exe”在开发者工具 2017 中未被识别为内部或外部命令错误
      • 如果您已经下载了“Visual Studio 2017 构建工具”安装程序 (visualstudio.com/thank-you-downloading-visual-studio/…),那么您可以启动该安装程序,点击修改并勾选“Web 开发构建任务”工作负载模块复选框.然后点击修改按钮,让安装程序完成。
      • 是的,你需要使用上面的命令行来安装。您无法在 GUI 上找到它。
      • 我从提供的链接中安装了Build Tools for Visual Studio 2017Web development build tasks,但是它仍然没有创建C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications 文件夹..我也没有看到vs_buildtools.exe..我搜索了整个`c:`
      • 谢谢..看起来从 VS 2017 开始,$(MSBuildExtensionsPath) 的值已更改为 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild stackoverflow.com/questions/47077150/…
      【解决方案5】:

      使用 chocolatey 可以轻松安装 2017 构建工具,其中已包含 WebBuildTools 选项。拥有installed 后,在管理员命令提示符下键入以下内容:

      choco install visualstudio2017buildtools -y
      

      对于 VS 2019,类似:

      choco install visualstudio2019buildtools -y
      

      【讨论】:

      • 您不必安装特定版本,您可以使用 Chocolatey 以这种方式安装它并合并接受的答案:cinst visualstudio2017buildtools -params '--add Microsoft.VisualStudio.Workload.WebBuildTools' -y ; cinst microsoft-build-tools -y
      • 如果我在 Azure CI 管道上,我知道我可以添加一个执行此 choco 命令的任务。但是.. 是否有服务器期望或vmImage 标志也可以实现此目的?
      【解决方案6】:

      从 Visual Studio 2015 升级到 2017 后,我遇到了类似的问题。当我尝试加载 Web 应用程序项目时,它向我抛出了错误消息:

      找不到导入的项目“C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications\Microsoft.WebApplication.targets”。此外,尝试在 $(VSToolsPath) 的后备搜索路径中找到 "WebApplications\Microsoft.WebApplication.targets" - "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0" 。这些搜索路径在“C:\Users\xxx\AppData\Local\Microsoft\VisualStudio\15.0_558e146f\devenv.exe.config”中定义。确认声明中的路径是正确的,并且该文件存在于磁盘上的任一搜索路径中。

      我找到了here这个错误的解决办法。

      在我的例子中,.csproj 文件包含以下几行:

      <PropertyGroup>
          <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
          <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v14.0</VSToolsPath>
      </PropertyGroup>
      

      VSToolPath标签中的v14.0替换为v$(VisualStudioVersion)后,即可加载项目。

      我还在VisualStudioVersion 标记中将v14.0 替换为v10.0,如上述链接中的解决方案所示。但对我来说,它也可以通过将其保留在 14.0 来实现。

      下面是这些行最后的样子:

      <PropertyGroup>
          <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
          <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
      </PropertyGroup>
      

      如果您的 .csproj 中根本没有这些行,那么您必须在此行之前手动添加它们:

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

      就我而言(错误消息略有不同但问题相同)是这一行:

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

      似乎自 2011 年以来使用 Visual Studio 版本创建的项目包含带有 VSToolsPath 重定义的行,而旧文件则没有。升级到较新的 VS 版本时,Visual Studio 从未自动添加它们,这就是为什么如果它们不存在则应添加它们的原因。

      此信息来源:https://developercommunity.visualstudio.com/content/problem/27735/project-fails-to-load-with-error-regarding-microso.html?childToView=123664#comment-123664 (单击显示更多 cmets 以查看完整的讨论主题 - 不幸的是,我无法在此“更多”部分直接链接到 cmets。)

      【讨论】:

        【解决方案7】:

        复制WebApplications文件夹

        C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0

        C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0

        或者在编译之前在你的构建脚本中添加以下行

        Copy-Item "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications" "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications" -Recurse -Force

        确保以提升的权限运行它

        【讨论】:

          【解决方案8】:

          如何创建VS 2017 pro、asp.net MVC应用并用Jenkins构建?

          在开发机器和构建服务器中使用 vs 2017 pro

          检查 VisualStudio 是否设置为 15
          Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v15.0\WebApplications\Microsoft.WebApplication.targets" Condition="false"

          设置 msbuild 工具
          到 jenkins 全局配置管理器中的 C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe

          使用jenkins,执行windows命令批处理:
          恢复 nugets: "C:\Program Files (x86)\Jenkins\tools\nuget\NuGet.exe" 恢复 "C:\Program Files (x86)\Jenkins\workspace\theapp_build\theapp.sln"

          使用jenkins,执行windows命令批处理:
          MSBuild 构建文件:theapp.sln
          命令行参数:/nologo /t:restore /t:rebuild /p:Configuration="Debug" /p:VisualStudioVersion=15.0

          【讨论】:

            【解决方案9】:

            上面接受的答案在技术上是正确的,只是不完整,有点令人困惑,至少对我来说,并且需要一个额外的步骤才能让 Visual Build Professional 工作。

            1. vs_buildtools.exe 在技术上不存在。我不得不create 询问该文件在哪里的问题。 vs_buildtools.exe 是 vs_buildtools_*******.exe 并且是实际的安装程序并不明显。此外,上面提到的“-add ***”只是一个简写。可以转到 GUI 并检查两个工作流任务。那也是一样的。我最终得到了 vs_buildtools 文件,虽然不需要它。

            2. VSB Pro 仍然没有构建我的项目。我在上面抛出了同样的错误。秘诀就是将C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0中的WebApplications文件夹复制到C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0。然后我重建了项目,一切都很好。我将 WebApplication.targets 文件放在了预期的位置。

            为什么微软无法做到这一点,我无法理解。另外,为什么要单独安装。 VS17 安装了大量的东西。像往常一样暗示构建工具。随便。

            我发布此答案是希望它对其他人有所帮助。我掉进了陷阱,因为我的项目没有建立起来而浪费了很多时间。我希望这个答案能澄清一点。

            【讨论】:

            • 确认“Build Tools for Visual Studio 2017”实际上将目标复制到 C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0 而 msbuild实际上试图在 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0 找到目标,所以我必须复制文件夹。显然第一个由 IDE 使用,第二个由独立的 msbuild 使用。奇怪。
            • 您不应手动复制任何内容。 vs_buildtools.exe 只是 Visual Studio 安装程序。它可以帮助您安装构建工具或 Visual Studio。对于这两者,您可以安装不同的工作负载和组件。如果您想为 Visual Studio 安装工作负载,您需要单击“修改”按钮。通过这种方式,您可以安装所需的组件。
            • 当然,但问题是 Visual Studio 安装程序似乎无法可靠地将 WebApplications 文件夹放在它需要的两个位置。正如莎拉建议的那样,手动复制是我设法可靠地让构建在我的开发机器上运行的唯一方法。
            猜你喜欢
            • 2018-07-30
            • 2016-03-06
            • 2015-10-29
            • 1970-01-01
            • 1970-01-01
            • 2016-10-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多