【问题标题】:The imported project Microsoft.WebApplications.targets was not found未找到导入的项目 Microsoft.WebApplications.targets
【发布时间】:2011-11-06 13:17:20
【问题描述】:

我在 TFS 服务器中配置持续集成时遇到此错误,但已经找到答案。也许这会对其他人有所帮助:

The imported project "C:\Program Files (x86)\
   MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\
   Microsoft.WebApplications.targets" was not found.

【问题讨论】:

标签: visual-studio tfs


【解决方案1】:

你需要...

  1. 在您的构建机器上安装 Visual Studio,
  2. 手动将 MSBuild\Visual Studio\v10.0\WebApplications 文件夹的内容复制到构建计算机上的相同位置。

【讨论】:

  • 是的,这就是答案。我打算回答自己,但我认为我没有足够的声誉来立即这样做。答案也在这里:stack247.wordpress.com/2011/08/29/…
  • 当前是否存在我们被不允许将目标复制到构建机器的情况?我们是否总是被许可从 Visual Studio 安装中复制 .targets 文件,假设即使是单台机器也已获得该 SKU 的许可?
  • 对于所有在未来遇到此问题的人,请记住,有时项目配置有静态路径。在我的例子中,该项目在v12.0 中开发时配置了v11.0 的静态路径,因此我只需要复制v11.0 路径中的小文件夹结构。吉姆回答得好!
【解决方案2】:
<!--<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" />-->

在 .CSproj 中注释上面的行。似乎是 Microsoft 的错误,在将项目从 Visual Studio 2008 更新到 2010 时不会删除或评论。

【讨论】:

  • 我遇到了一个类似的问题,但使用了不同版本的 VS。 &lt;Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" /&gt;
  • 谢谢。在我的 .csproj 文件中,我有两行带有 Microsoft.WebApplication.targets 的行,一旦删除,构建就可以工作。 (项目是一个 .net 4.5 MVC,我使用的是dotnet build 命令,使用 VS 构建工作正常。)
【解决方案3】:

在设置与 Jenkins 的持续集成时,我看到了同样的错误。我能够向 MSBUILD 添加一个命令行参数:/p:VisualStudioVersion=12.0,因为我的构建服务器上安装了 Visual Studio 2012。

【讨论】:

    【解决方案4】:

    我经历过类似的事情。

    我在我们的Autobuild.targets 文件中写了这个,作为构建的一部分运行。它定义了MSWebApplicationTargets:

    <MSWebApplicationTargets>$(SolutionDirectory)\packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3</MSWebApplicationTargets>
    

    然后在作为项目一部分并在其具有的构建中使用的.csproj 文件中:

    <Import
         Project="$(MSWebApplicationTargets)/tools/VSToolsPath/WebApplications/Microsoft.WebApplication.targets" />
    

    现在我们的问题是,当我们在 Visual Studio 中打开项目时,它说 c:/tools/VSToolsPath/WebApplications/Microsoft.WebApplication.targets 不存在(因为 VS 认为 MSWebApplicationTargets 未定义,因此似乎将其默认为 c:\)。您没有提供足够的信息,但也许这也是导致您的问题的原因。

    我所要做的就是添加一个条件:

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

    为什么要使用Microsoft.WebApplication.targets

    作为进一步讨论的一部分,我使用Microsoft.WebApplication.targets 进行了此操作,因此我们不必依赖在构建服务器上安装 Visual Studio。我将其添加为依赖项:

    • 在 Visual Studio 中右键单击项目并转到 manage nuget packages。这创建了一个 packages.config 文件,将 MSBuild.Microsoft.VisualStudio.Web.targets 列为依赖项。
    • 然后我将nuget.exe restore 添加到构建脚本的开头,以便下载依赖项。

    【讨论】:

      【解决方案5】:

      下载并安装Microsoft Visual Studio 2013 Shell (Isolated) Redistributable Package。或使用vs_isoshell.exe 的直接链接。我打算在以后为此制作一个 NuGet 包。

      我认为这种方法的优点是它消除了对版权问题的任何疑虑。

      【讨论】:

      • 这是一个黄金提示。当我试图在 SharpDevelop 下构建解决方案时,这是唯一一个带来真正独立(非 VS)解决方案的解决方案。我知道 SharpDevelop 与 OP 的问题无关,只是为任何其他 SD 用户记录并声明这两种方式都有效。
      【解决方案6】:

      如果您已经安装了 Visual Studio?也许您安装了 Visual Studio 2012(10.0 表示 VS 2010)?如果是这种情况,您可以在 .csproj 文件中搜索“10.0”并将其替换为“11.0”,然后您就可以正常打开项目了。

      【讨论】:

        【解决方案7】:

        我也遇到了这个问题,只是这些文件已经存在。经过大量故障排除后,答案变得非常简单:重新启动构建代理服务。就我而言,它是:“Visual Studio Team Foundation Build Service Host 2013”​​

        【讨论】:

          【解决方案8】:

          如果您不从构建服务器部署,则只需关闭构建服务器上的Microsoft.WebApplication.targets。在这里查看我的答案:https://stackoverflow.com/a/35781566/4955344

          【讨论】:

            【解决方案9】:

            我在 VS2017 上也遇到了这个错误;然后我将以下两项注释掉:

            <!--<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /><Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />-->
            

            重新打开解决方案,项目可以再次加载成功。 (我不知道这是怎么回事,因为这个项目之前可以正常加载,也许我最近通过'vs-installer.exe'添加了一些新功能)

            【讨论】:

            • 您能否添加文档链接以支持您的事实?
            【解决方案10】:

            这里有一些 PowerShell 通过在我的构建服务器上的 MSBuild.exe.config 中添加缺少的引用为我解决了这个问题。调整 VS 版本/目标路径的路径。

            [xml]$msbuild_config = Get-Content -Path "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild.exe.config"
            $webApplicationTarget = $msbuild_config.configuration.msbuildToolsets.toolset.property[0].Clone()
            $webApplicationTarget.name = "MSWebApplicationTargets"
            $webApplicationTarget.value = "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications"
            $msbuild_config.configuration.msbuildToolsets.toolset.AppendChild($webApplicationTarget)
            $msbuild_config.save("C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild.exe.config")```
            

            【讨论】:

              【解决方案11】:

              这是我在 vs19 中为解决这个问题所做的。我导航到这条路径:-

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

              并注意到\vxx.0(vs 抱怨的特定目录不存在)。在我的情况下,vs 正在寻找\v16.0,尽管\v15.0\v14.0\v12.0 在那里,但它并不存在。所以我手动创建了一个v16.0 文件夹并将WebApplications\Microsoft.WebApplications.targetsv14.0 复制到v16.0 文件夹并且问题已解决,但是我不确定这是否是解决此问题的最佳方法,它似乎有点hacky .而且我无法在.csproj 文件中更改此路径,因为该路径可能存储在$(MSBuildBinPath) 之类的变量中,并且在那里没有硬编码。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2010-09-05
                • 2021-12-31
                • 2021-08-19
                • 1970-01-01
                • 2015-09-02
                • 1970-01-01
                • 1970-01-01
                • 2021-11-15
                相关资源
                最近更新 更多