外部VS2013生成错误“错误MSB4019:找不到导入的项目<路径>”


201

我正在通过命令行而不是在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。我尝试搜索注册表,结果一无所获。

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

有什么想法吗?



就我而言,我必须在使用WebPublish目标构建的构建事件中指定正确的VisualStudioVersion。
user145400

Answers:


250

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

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

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

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

正如Sielu指出的那样,您必须确保.proj文件开头,<Project ToolsVersion="12"否则下一次在Visual Studio 2010中打开项目时,它将再次添加已删除的节点。

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

msbuild myproject.csproj /p:VisualStudioVersion=12.0

或编辑您的构建定义:

编辑构建定义以指定<code> VisualStudioVersion </ code>属性


1
我在命令提示符下使用msbuild遇到了错误。从项目文件中删除此部分可以解决此问题。
彼得·赫德伯格

7
我使用了这个答案,并且只有在确保我的* proj文件以<Project ToolsVersion =“ 12”开头且在<Project ToolsVersion =“ 4”之前,并且每次在VS中打开项目时,它才会再次添加两个节点(即,它将项目重新迁移到最新版本)。
Sielu 2014年

3
@giammin,我已经找到了解决方案。不要从您的项目文件中删除该部分。在构建定义中设置正确的工具版本。这很容易做到。打开您的构建定义,然后转到“过程”页面。然后在“ 3.高级”组下,有一个名为“ MSBuild Arguments”的属性。使用以下语法“ /p:VisualStudioVersion=12.0”将参数放置在此处。当然没有引号。如果有更多参数,请用空格而不是逗号分隔。您建议删除的配置在构建过程中被Visual Studio的其他部分使用...
Ralph Jansen 2014年

9
删除该行似乎破坏了Web Deploy
Colin Pear

4
通过使用上面建议的/p:VisualStudioVersion=12.0属性,我解决了同样的问题。谢谢
Randeep

70

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

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

/p:VisualStudioVersion=12.0 

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


1
我们刚刚完成了从TFS 2005到TFS 2013的升级,这是我们的最后一个障碍。这肯定对我们有用,并且使我免于拔掉头发。非常感谢!+1。
西蒙·怀特海德

2
文章由赛义德·易卜拉欣·哈希米介绍在Visual Studio 2010/2012的问题。命令行版本使用sln文件格式版本-1作为VisualStudioVersion。您可以按照Ralph的描述在命令行中覆盖此值,也可以将其作为生成脚本中MSBuild任务的属性来覆盖。我在Visual Studio 2013中遇到了相同的问题,而重写VisualStudioVersion解决了该问题。
麦当劳

1
这也为我们工作。我们还考虑修改构建模板本身,描述在这里,如果你有几十个生成定义,这可能是一个更好的选择。
JamesQMurphy 2014年

这对我有用。我在csproj文件中删除了对visualstudioversion的任何引用,然后添加了msbuild参数
Jhayes2118,2014年

51

这是密切相关的,但可能会或可能不会解决OP的特定问题。以我为例,我试图使用VS2013自动执行Azure站点的部署。通过VS进行构建和部署的工作原理,但是,使用MSBuild在“目标”周围显示了类似的错误。事实证明,MSBuild在VS2013下有所不同,现在是VS的一部分,而不是.Net Framework的一部分(请参阅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

这为我解决了。另外,这里有类似问题的类似答案:stackoverflow.com/a/19826448/61569
Anthony F

22

我刚刚收到Kinook的回复,后者给了我一个链接

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

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

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


非常感谢你,这个建筑时的NodeJS解决我的问题,node-gypCpp default.props没有被发现!+1
Pogrindis

21

贾明的解决方案部分不正确。您不应该从解决方案中删除整个PropertyGroup。如果这样做,MSBuild的“ DeployTarget = Package”功能将停止工作。此功能依赖于设置的“ 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

我的FSharp目标出现了这个问题(FSharpTargetsPath为空)。

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

由于各种原因,我们的构建使用系统特权运行,并且仅在“用户”级别(通过VS 2013安装程序)设置了环境变量“ VisualStudioVersion”(这很合理)。

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


5
在运行构建服务器(例如CruiseControl或TeamCity)时,这可能是常见的情况,其中服务在特定的服务帐户下运行,该帐户甚至可能没有交互式桌面权限。本技巧为我解决了这个问题(VS 2013安装在Server 2008 R2的
全新

在哪里可以看到我的“ VisualStudioVersion”?
WEFX

@WEFX通过System从“控制面板”中选择来查看环境变量,然后选择Advanced system settings,最后单击Environment Variables
斯科特

6

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


这对我有用,比修改项目文件更可取。
肖恩2014年

4

如果将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


1
ToolsVersion一定不是修复此错误消息的唯一变量,因为我看到带有ToolsVersion的项目无法正确构建。
Patrick Desjardins 2014年

2

我正在使用外部构建实用程序。想想像Ants之类的东西,如果我对产品的理解正确,那只是商业版本。我必须联系制造商以获取答案。

事实证明,项目中有一个全局宏DEVSTUDIO_NET_DIR。我不得不在那里更改到.Net的路径。他们将各种Visual Studio版本都列为“动作”,虽然我不喜欢它,但是所有道路都导致了幕后的那个全局变量。如果可以,我将其列为产品的缺陷,除非我理解不足。更正那里的路径可以解决构建问题。


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


2

我有类似的问题。所有建议的解决方案都可以解决此问题,但不能解决错误源。如果您使用的是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

这可以在项目文件中进行任何更改。


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" />

完成了。


2

在我的情况下,我只是通过打开.csproj文件在行下方注释并完成了窍门

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

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

我从解决方案中选择了一个Web项目,并尝试将其作为一个独立的项目打开,但该问题已经解决了。


2

使用正确版本的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”及其工作方式
ELKALAKHI Mohammed,

是的,我使用的是SSDT项目(.sqlproj),项目文件中的VisualStudioVersion = 14.0。我安装了核心3.1,该核心将目标的环境变量设置为仅知道上帝在哪里。建议您在文件夹中使用msbuild就像一个魅力!
马修·贝克

1

在我的情况下,开发环境是VS2013,我使用的是TFS2010。构建针对.NET 4.5.1。我正在为CI设置自动构建。每当我尝试上述解决方法时-例如完全删除属性组或替换某些行等。我的构建曾经在TFS中发生,但是我发布到Azure的过程却因“ MSDeploy”失败或有时出现其他错误。我无法同时实现两者。

所以最后我不得不传递MSBuild参数来解决该问题。

转到“编辑构建定义>过程> 3.高级> MSBuild参数(设置为)/p:VisualStudioVersion=12.0”

它为我工作。


1

您应该将文件夹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文件。
ThatBlairGuy 2016年

0

你会找到

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

在出现此错误的csproj文件中。只需将其从csproj中删除,然后进行构建即可。



0

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

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


0

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


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


0

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


0

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


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

查找其他版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.