【问题标题】:External VS2013 build error "error MSB4019: The imported project <path> was not found"外部VS2013构建错误“错误MSB4019:未找到导入的项目<path>”
【发布时间】:2013-11-12 03:40:41
【问题描述】:

我正在通过命令行而不是在 Visual Studio 2013 中构建项目。请注意,我已将项目从 Visual Studio 2012 升级到 2013。该项目在 IDE 中构建良好。另外,我先完全卸载了VS2012,重新启动,安装了VS2013。我拥有的唯一 Visual Studio 版本是 2013 Ultimate。

ValidateProjects:
    39>path_to_project.csproj(245,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 <Import> declaration is correct, and that the file exists on disk.
    39>Done Building Project "path_to_project.csproj" (Clean target(s)) -- FAILED.

以下是有问题的两行:

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

原来的第二行是 v10.0,但我手动将其更改为 v12.0。

$(VSToolsPath) 从我看到的内容延伸到 v11.0 (VS2012) 文件夹,该文件夹显然不再存在。路径应该是 v12.0。

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

我尝试在我的系统环境变量表中指定 VSToolsPath,但外部构建实用程序仍使用 v11.0。我尝试在注册表中搜索,但没有找到任何结果。

遗憾的是,我没有看到任何简单的方法来获得使用的确切命令行。我使用构建工具。

想法?

【问题讨论】:

标签: c# web-applications visual-studio-2013 build visual-build-professional


【解决方案1】:

我刚收到 Kinook 的回复,他给了我link

基本上,我需要在构建之前调用以下命令。我猜 Visual Studio 2013 不会先自动注册环境,但 2012 会,或者我做了然后忘记了。

call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86

希望这篇文章对其他人有所帮助。

【讨论】:

  • 非常感谢,这解决了我在构建nodeJS时遇到的问题node-gyp 没有找到Cpp default.props! +1
【解决方案2】:

我遇到了同样的问题并找到了更简单的解决方案

这是由于Vs2012在csproj文件中添加了以下内容:

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

您可以安全地删除该部分,然后您的解决方案就会构建。

作为Sielu pointed out,您必须确保 .proj 文件开始 &lt;Project ToolsVersion="12" 否则下次打开 使用 Visual Studio 2010 的项目,它将再次添加已删除的节点。

否则,如果您需要使用 webdeploy 或使用构建服务器,上述解决方案将不起作用,但您可以在构建脚本中指定 VisualStudioVersion 属性:

msbuild myproject.csproj /p:VisualStudioVersion=12.0

或编辑您的构建定义:

【讨论】:

  • 我在命令提示符下使用 msbuild 时遇到了错误。从项目文件中删除这部分解决了这个问题。
  • 我使用了这个答案,只有当我确保我的 *proj 文件以
  • @giammin,我已经找到了解决方案。不要从项目文件中删除该部分。在构建定义中设置正确的工具版本。这很容易做到。打开您的构建定义并转到“流程”页面。然后在“3. Advanced”组下,您有一个名为“MSBuild Arguments”的属性。使用以下语法“/p:VisualStudioVersion=12.0”将参数放在那里。当然没有引号。如果您有更多参数,请用空格而不是逗号分隔它们。您建议删除的配置被 Visual Studio 的其他部分在您的构建过程中使用...
  • 删除该行似乎会破坏 Web Deploy
  • 我有同样的问题通过使用上面推荐的 /p:VisualStudioVersion=12.0 属性得到解决。谢谢
【解决方案3】:

我使用的是外部构建实用程序。想想像蚂蚁这样的东西,如果我理解正确的话,只是一个商业版本。我不得不联系制造商以获得答案。

事实证明,项目中有一个全局宏,DEVSTUDIO_NET_DIR。我不得不在那里更改.Net 的路径。他们将各种视觉工作室版本列为“动作”,通过我关闭,但所有的道路都回到了幕后的那个全局变量。如果我有自己的方式,我会将其列为产品的缺陷,除非我在我的理解中遗漏了一些东西。更正那里的路径修复了构建问题。

【讨论】:

    【解决方案4】:

    在命令行中运行它也可以解决问题。 SETX VisualStudioVersion "12.0"

    【讨论】:

    • 这对我有用,比修改项目文件更可取。
    【解决方案5】:

    我们的 FSharp 目标有这个问题(FSharpTargetsPath 是空的)。

    很多路径都是参考VS版本构建的。

    由于各种原因,我们的构建以系统权限运行,并且环境变量“VisualStudioVersion”仅在“用户”级别设置(由 VS 2013 安装程序) - 这很公平。

    确保在您运行的级别(系统或用户)将“VisualStudioVersion”环境变量设置为“12.0”。

    【讨论】:

    • 这可能是运行构建服务器(例如 CruiseControl 或 TeamCity)时的常见情况,其中服务在特定服务帐户下运行,甚至可能没有交互式桌面权限。这个技巧为我解决了这个问题(VS 2013 安装在全新安装的 Server 2008 R2 上,使用 CruiseControl.NET)
    • 在哪里可以看到我的“VisualStudioVersion”?
    • @WEFX 在控制面板中选择System查看环境变量,然后选择Advanced system settings,最后点击Environment Variables
    【解决方案6】:

    你会发现

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

    在出现此错误的 csproj 文件中。 只需从 csproj 中删除它,然后构建。

    【讨论】:

      【解决方案7】:

      我也有这个问题,您可以通过在构建定义中设置工具版本来修复它。

      这很容易做到。打开您的构建定义并转到“Process”页面。然后在“3. Advanced”组下,您有一个名为“MSBuild Arguments”的属性。使用以下语法将参数放在那里

      /p:VisualStudioVersion=12.0 
      

      如果您有更多参数,请用空格而不是逗号分隔它们。

      【讨论】:

      • 我们刚刚完成了从 TFS 2005 到 TFS 2013 的升级,这是我们的最后一个障碍。这绝对对我们有用,让我免于拔头发。非常感谢! +1。
      • article by Sayed Ibrahim Hashimi 描述了 Visual Studio 2010/2012 中的问题。命令行构建使用 sln 文件格式版本 -1 作为 VisualStudioVersion。您可以按照 Ralph 的描述从命令行覆盖此值,或者作为构建脚本中的 MSBuild 任务的属性。我在使用 Visual Studio 2013 时遇到了同样的问题,覆盖 VisualStudioVersion 解决了这个问题。
      • 这也适用于我们。我们还考虑修改构建模板本身,描述为here,如果您有数十个构建定义,这可能是一个更好的选择。
      • 这对我有用。我在 csproj 文件中删除了对 visualstudioversion 的任何引用,然后添加了那个 msbuild 参数
      【解决方案8】:

      如果您将 Visual Studio 2012 迁移到 2013,请使用 edior 打开 *.csprorj 项目文件。
      并检查“项目”标签的 ToolsVersion 元素。

      这是值 4.0
      你到了 12.0

      • 来自

        <?xml version="1.0" encoding="utf-8"?>
        <Project ToolsVersion="4.0"
        
      • <?xml version="1.0" encoding="utf-8"?>
        <Project ToolsVersion="12.0"
        

      或者如果您使用 msbuild 构建,则只需指定 VisualStudioVersion 属性

      msbuild /p:VisualStudioVersion=12.0

      【讨论】:

      • ToolsVersion 不能是修复此错误消息的唯一变量,因为我看到项目的 ToolsVersion 无法正确构建。
      【解决方案9】:

      giammin's solution 部分错误。您不应该从您的解决方案中删除整个 PropertyGroup。如果这样做,MSBuild's "DeployTarget=Package" 功能将停止工作。此功能relies on the "VSToolsPath" 正在设置中。

      <PropertyGroup>
        <!-- VisualStudioVersion is incompatible with later versions of Visual Studio.  Removing. -->
        <!-- <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion> -->
        <!-- VSToolsPath is required by MSBuild for features like "DeployTarget=Package" -->
        <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
      </PropertyGroup>
      ...
      <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
      

      【讨论】:

        【解决方案10】:

        我已安装 Visual Studio 2013。这对我有用:

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

        所以我将条件从== 更改为!=,并将值从10.0 更改为12.0

        【讨论】:

          【解决方案11】:

          只需做一件事即可解决问题:将 TeamCity 升级到 8.1.x 或更高版本,因为仅在 TeamCity 8.1 中引入了对 Visual Studio 2012/2013 和 MSBuild Tools 2013 的支持。升级 TeamCity 后,相应地在构建步骤中修改 MSBuild 工具版本设置,问题就会消失。欲了解更多信息,请阅读此处:http://blog.turlov.com/2014/07/upgrade-teamcity-to-enable-support-for.html

          【讨论】:

            【解决方案12】:

            我 - 将 VisualStudioVersion 变量的 v11.0 值更改为 v10.0 没有任何帮助。没有更改 .csproj 文件中的变量。通过命令提示符设置它没有。等等……

            最终将该特定版本 (v11.0) 的本地文件夹复制到我的构建服务器。

            【讨论】:

              【解决方案13】:

              我有类似的问题。所有建议的解决方案都只是解决这个问题,但没有解决错误来源。如果您使用的是 tfs 构建服务器,则不应应用 @giammin 解决方案,因为它只是崩溃的发布功能。 @cat5dev 解决方案 - 解决问题但不解决问题的来源。

              我几乎可以肯定您正在使用 VS2012 的构建过程模板,例如 ReleaseDefaultTemplate.11.1.xaml or DefaultTemplate.11.1.xaml 这些构建模板是为 VS2012 制作的,并且 $(VisualStudioVersion) 设置为 11.0

              应该使用VS2013的构建过程模板 ReleaseTfvcTemplate.12.xaml or TfvcTemplate.12.xaml 将 $(VisualStudioVersion) 设置为 12.0

              这无需对项目文件进行任何更改即可工作。

              【讨论】:

                【解决方案14】:

                在我的例子中,开发环境是 VS2013,我使用的是 TFS 2010。构建的目标是 .NET 4.5.1。我正在为 CI 设置自动构建。每当我尝试上述解决方法时——比如完全删除属性组或替换某些行等。我的构建曾经发生在 TFS 中,但我发布到 azure 时会因“MSDeploy”或有时出现一些不同的错误而失败。 我无法同时实现两者。

                所以最后我不得不通过 MSBuild 参数来解决问题。

                Goto Edit build definition > Process > 3. Advanced > MSBuild Arguments (set to) /p:VisualStudioVersion=12.0

                它对我有用。

                【讨论】:

                  【解决方案15】:

                  您应该复制文件夹 WebApplications 从 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\ 到 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\

                  【讨论】:

                  • 或从安装 Visual Studio 2013 的位置仅复制 Microsoft.WebApplication.targets 文件。
                  【解决方案16】:

                  这密切相关,但可能会或可能不会解决 OP 的特定问题。就我而言,我试图使用 VS2013 自动部署 Azure 站点。但是,通过 VS 构建和部署工作,使用 MSBuild 在“目标”周围显示出类似的错误。事实证明 MSBuild 在 VS2013 下有所不同,现在是 VS 的一部分,而不是 .Net 框架(请参阅http://timrayburn.net/blog/visual-studio-2013-and-msbuild/)。基本上,使用正确版本的 MSBuild:

                  旧,VS2012

                  C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
                  

                  新,VS2013

                  C:\Program Files (x86)\MSBuild\12.0\bin\msbuild.exe
                  

                  较新,VS2015

                  C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe
                  

                  还是较新的 VS2017(尚未完全测试,但发现了 - 他们已经移动了一些东西)

                  C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\msbuild.exe
                  

                  【讨论】:

                  【解决方案17】:

                  我已经尝试了上述所有解决方案,但仍然没有运气。我听说有人在他们的构建服务器上安装了 Visual Studio 来修复它,但我只有 5gb 的可用空间,所以我只是将 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio 复制到我的构建服务器并称之为一天.之后开始工作,使用 team city 9.x 和 visual studio 2013。

                  【讨论】:

                    【解决方案18】:

                    我也有同样的错误..我这样做是为了修复它

                    <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" />
                    

                    改成

                    <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
                    

                    它已经完成了。

                    【讨论】:

                      【解决方案19】:

                      基于 TFS 2015 Build Server

                      如果你反驳这个错误... Error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the &lt;Import&gt; declaration is correct, and that the file exists on disk.

                      打开报错信息中命名项目的.csproj文件,将下面的部分注释掉

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

                      【讨论】:

                      • 您的解决方案将面临无法发布并包含最新更改的风险。
                      【解决方案20】:

                      我在安装一些 VS 组件时收到此错误。不幸的是,这些答案都没有帮助我。我使用 TFS 进行命令开发,我无权编辑构建定义。我通过删除名为VS110COMNTOOLSVS120COMNTOOLS 的环境变量解决了这个问题。我认为它是与我的 VS 组件一起安装的。

                      【讨论】:

                        【解决方案21】:

                        在我的情况下,我只是通过打开 .csproj 文件来评论下面的行并成功了

                        .&lt;!-- &lt;Import Project="..\PRPJECTNAME.targets" /&gt; --&gt;

                        我的问题可能有所不同,但我被拖到这里,但这可能会对某人有所帮助。

                        我从我的解决方案中选择了一个 Web 项目,并尝试将它作为一个出现问题的独立项目打开,在上述问题能够解决之后。

                        【讨论】:

                        • 您的解决方案将面临无法发布内部最新更改的风险。
                        【解决方案22】:

                        我发现我缺少本地 PC 上的 WebApplications 文件夹,没有像使用 2012 时那样安装 Visual Studio 2017。

                        【讨论】:

                          【解决方案23】:

                          就我而言,我使用了错误版本的MSBuild.exe

                          您需要使用的版本取决于您用于创建项目的 Visual Studio 版本。就我而言,我需要 14.0(使用过 Visual Studio 2015)。

                          发现于:

                          C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe
                          

                          您可以查看以下内容:

                          C:\Program Files (x86)\MSBuild
                          

                          查找其他版本。

                          【讨论】:

                            【解决方案24】:

                            使用正确版本的 MSBuild。将环境变量设置为:

                            C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin
                            

                            这也适用于 VS 2019 项目

                            之前我们将其设置为 C:\Windows\Microsoft.NET\Framework\v4.0.30319

                            【讨论】:

                            • 我使用“C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\MSBuild.exe”而不是“C:\Windows\Microsoft.NET\ Framework\v4.0.30319\MSBuild.exe" 及其工作
                            • 是的,我使用的是 SSDT 项目 (.sqlproj),项目文件中的 VisualStudioVersion = 14.0。我安装了核心 3.1,它将目标的环境变量设置为只有上帝知道在哪里。使用您建议的文件夹中的 msbuild 就像一个魅力!
                            猜你喜欢
                            • 2015-02-07
                            • 1970-01-01
                            • 2021-11-15
                            • 2018-12-03
                            • 2020-10-15
                            • 2018-11-02
                            • 2014-09-13
                            • 1970-01-01
                            • 2012-11-08
                            相关资源
                            最近更新 更多