外部VS2013构建错误“错误MSB4019:未找到导入的项目<path>”
Posted
技术标签:
【中文标题】外部VS2013构建错误“错误MSB4019:未找到导入的项目<path>”【英文标题】:External VS2013 build error "error MSB4019: The imported project <path> was not found" 【发布时间】: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。我尝试在注册表中搜索,但没有找到任何结果。
遗憾的是,我没有看到任何简单的方法来获得使用的确切命令行。我使用构建工具。
想法?
【问题讨论】:
类似问题***.com/questions/17433904/… 就我而言,我必须在使用 WebPublish 目标构建的构建事件中指定正确的 VisualStudioVersion。 【参考方案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 文件开始
<Project ToolsVersion="12"
否则下次打开 使用 Visual Studio 2010 的项目,它将再次添加已删除的节点。
否则,如果您需要使用 webdeploy 或使用构建服务器,上述解决方案将不起作用,但您可以在构建脚本中指定 VisualStudioVersion
属性:
msbuild myproject.csproj /p:VisualStudioVersion=12.0
或编辑您的构建定义:
【讨论】:
我在命令提示符下使用 msbuild 时遇到了错误。从项目文件中删除这部分解决了这个问题。 我使用了这个答案,只有当我确保我的 *proj 文件以我使用的是外部构建实用程序。想想像蚂蚁这样的东西,如果我理解正确的话,只是一个商业版本。我不得不联系制造商以获得答案。
事实证明,项目中有一个全局宏,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
【讨论】:
这为我解决了问题。此外,这里类似问题的类似答案:***.com/a/19826448/61569【参考方案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 <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> -->
【讨论】:
您的解决方案将面临无法发布并包含最新更改的风险。【参考方案20】:我在安装一些 VS 组件时收到此错误。不幸的是,这些答案都没有帮助我。我使用 TFS 进行命令开发,我无权编辑构建定义。我通过删除名为VS110COMNTOOLS
和VS120COMNTOOLS
的环境变量解决了这个问题。我认为它是与我的 VS 组件一起安装的。
【讨论】:
【参考方案21】:在我的情况下,我只是通过打开 .csproj 文件来评论下面的行并成功了
.<!-- <Import Project="..\PRPJECTNAME.targets" /> -->
我的问题可能有所不同,但我被拖到这里,但这可能会对某人有所帮助。
我从我的解决方案中选择了一个 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 就像一个魅力!以上是关于外部VS2013构建错误“错误MSB4019:未找到导入的项目<path>”的主要内容,如果未能解决你的问题,请参考以下文章
使用 VS 2013 和 TFS 2013 构建 vdproj 文件 - 出现构建错误 - 验证时出错。 HRESULT = '8000000A'
带有 vs2013 的 Windows 7 上的 Chromium 构建失败(警告为错误)