ChatGPT解决这个技术问题 Extra ChatGPT

外部 VS2013 构建错误“错误 MSB4019:未找到导入的项目 <路径>”

我正在通过命令行而不是在 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。

K
KirstieBallance

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

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

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

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

正如 Sielu 指出的,您必须确保 .proj 文件以

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

msbuild myproject.csproj /p:VisualStudioVersion=12.0

或编辑您的构建定义:

https://i.stack.imgur.com/OvFTQ.png


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

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

这很容易做到。打开您的构建定义并转到“流程”页面。然后在“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 参数
J
Jester

这是密切相关的,但可能会或可能不会解决 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
S
Sarah Weinberger

我刚收到 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
C
Community

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

S
Scott

我的 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
S
Steve

在命令行中运行它也可以解决问题。 SETX VisualStudio 版本“12.0”


这对我有用,比修改项目文件更可取。
K
Kim Ki Won

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

那是价值 4.0 你让它达到 12.0

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

msbuild /p:VisualStudioVersion=12.0


ToolsVersion 不能是修复此错误消息的唯一变量,因为我看到无法正确构建的带有 ToolsVersion 的项目。
S
Sarah Weinberger

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

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


p
pinus.acer

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

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

因此,我将条件从 == 更改为 !=,将值从 10.0 更改为 12.0


I
Imaginary

我有类似的问题。所有建议的解决方案都只是解决这个问题,但没有解决错误来源。如果您使用的是 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

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


P
Pyro

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

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

改成

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

它完成了。


U
Usman Younas

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

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

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

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


您将面临无法发布您的解决方案以及内部最新更改的风险。
M
Manish

使用正确版本的 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”。 exe”及其工作
是的,我正在使用 SSDT 项目 (.sqlproj),项目文件中的 VisualStudioVersion = 14.0。我安装了核心 3.1,它将目标的环境变量设置为只有上帝知道在哪里。使用您建议的文件夹中的 msbuild 就像一个魅力!
V
Vishwajit G

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

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

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

它对我有用。


T
Tazos333

您应该将文件夹 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 文件。
R
RononDex

你会找到

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

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


A
Alex T.

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


J
Jurijs Kastanovs

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

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


o
odyth

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


J
Julius Depulla

基于 TFS 2015 构建服务器

如果您解决此错误... 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> -->


您将面临无法发布您的解决方案以及内部最新更改的风险。
J
Joseph Katzman

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


K
Kris

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


E
EM-Creations

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

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

这是在以下位置找到的:

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

您可以查看以下内容:

C:\Program Files (x86)\MSBuild

寻找其他版本。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅