209

我正在通过命令行而不是在 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。我尝试通过注册表搜索,但什么也没找到。

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

想法?

4

24 回答 24

257

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

这是由于 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> 属性

于 2013-11-20T11:54:44.987 回答
71

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

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

/p:VisualStudioVersion=12.0 

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

于 2014-03-21T10:51:40.503 回答
51

这是密切相关的,但可能会或可能不会解决 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
于 2014-10-18T19:10:51.600 回答
23

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

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

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

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

于 2013-10-31T23:27:24.733 回答
21

giammin 的解决方案部分不正确。您不应该从您的解决方案中删除整个 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)' != ''" />
于 2014-06-03T17:26:38.987 回答
10

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

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

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

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

于 2014-01-29T01:22:28.583 回答
6

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

于 2014-01-22T20:59:00.397 回答
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

于 2014-05-28T09:18:57.237 回答
2

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

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

于 2013-11-20T13:06:53.750 回答
2

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

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

所以我把条件从==to!=和值从10.0to 12.0

于 2014-07-10T11:54:33.980 回答
2

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

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

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

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

于 2014-09-05T14:43:48.653 回答
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" />

它完成了。

于 2016-05-17T07:59:16.773 回答
2

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

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

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

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

于 2017-03-30T14:10:50.240 回答
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

于 2019-12-04T15:55:54.160 回答
1

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

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

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

它对我有用。

于 2014-09-18T11:15:20.563 回答
1

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

于 2014-10-03T05:39:36.957 回答
0

你会找到

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

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

于 2014-02-14T08:34:16.283 回答
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

于 2014-07-24T15:54:32.527 回答
0

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

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

于 2014-08-21T11:36:16.410 回答
0

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

于 2016-02-04T07:28:08.273 回答
0

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

于 2017-03-10T17:01:12.633 回答
0

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

于 2017-03-27T16:31:21.673 回答
0

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

于 2017-07-28T14:56:45.013 回答
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

寻找其他版本。

于 2018-10-03T15:35:27.513 回答