外部VS2013构建错误“错误MSB4019:找不到导入的项目<path>”</path>

时间:2013-10-31 23:19:12

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

我正在通过命令行而不是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。我尝试在注册表中搜索,但没有提到任何内容。

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

思想?

24 个答案:

答案 0 :(得分:246)

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

这是由于Vs2012在csproj文件中添加了这一部分:

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

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

  

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

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

msbuild myproject.csproj /p:VisualStudioVersion=12.0

或编辑您的构建定义:

edit build definition to specify the <code>VisualStudioVersion</code> property

答案 1 :(得分:70)

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

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

/p:VisualStudioVersion=12.0 

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

答案 2 :(得分:50)

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

OLD,VS2012

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

NEW,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

答案 3 :(得分:22)

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

基本上,我需要在制作之前调用以下内容。我想Visual Studio 2013不会首先自动注册环境,但2012年确实如此,或者我做了并忘了。

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

希望这篇文章可以帮助别人。

答案 4 :(得分:21)

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)' != ''" />

答案 5 :(得分:10)

我的FSharp目标存在此问题(FSharpTargetsPath为空)。

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

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

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

答案 6 :(得分:6)

在命令行中运行此命令也可以解决问题。 SETX VisualStudioVersion“12.0”

答案 7 :(得分:3)

如果将Visual Studio 2012迁移到2013,请使用edior打开* .csprorj项目文件。
并检查'Project'标签的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

答案 8 :(得分:2)

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

我几乎可以肯定你正在使用VS2012的构建过程模板 ReleaseDefaultTemplate.11.1.xaml or DefaultTemplate.11.1.xaml 这些构建模板已经针对VS2012和$(VisualStudioVersion)设置为11.0

应该使用VS2013的构建过程模板 {(1)}将$(VisualStudioVersion)设置为12.0

无需更改项目文件即可使用。

答案 9 :(得分:2)

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

<!-- <Import Project="..\PRPJECTNAME.targets" /> -->

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

我从我的解决方案中选择了一个单独的Web项目,并尝试将其打开为一个独立的项目,这是一个问题,在上面的问题之后能解决问题。

答案 10 :(得分:2)

我也有同样的错误..我这样做是为了解决它

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

更改为

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

已经完成了。

答案 11 :(得分:2)

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

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

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

答案 12 :(得分:2)

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

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

答案 13 :(得分:1)

在我的案例中,dev环境是VS2013,我正在使用TFS 2010.Build是针对.NET 4.5.1的。我正在为CI设置自动构建。每当我尝试上面提到的变通方法时 - 比如完全删除属性组或替换某些行等等。我的构建曾经发生在TFS中,但我发布到azure曾经失败过'MSDeploy'或者有时会出现一些不同的错误。 我无法同时实现这两个目标。

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

转到修改构建定义&gt;处理&gt; 3.高级&gt; MSBuild Arguments(设置为)/p:VisualStudioVersion=12.0

它对我有用。

答案 14 :(得分:1)

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

答案 15 :(得分:1)

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

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

这也将适用于VS 2019项目

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

答案 16 :(得分:0)

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

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

答案 17 :(得分:0)

解决问题只需要做一件事:将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

答案 18 :(得分:0)

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

答案 19 :(得分:0)

你会找到

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

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

答案 20 :(得分:0)

基于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 <Import> 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> -->

答案 21 :(得分:0)

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

答案 22 :(得分:0)

我发现我错过了本地PC上的WebApplications文件夹,没有像我在使用2012时那样安装Visual Studio 2017.

答案 23 :(得分:0)

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

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

在以下位置找到了此

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

您可以查看以下内容:

C:\Program Files (x86)\MSBuild

要查找其他版本。