我正在通过命令行而不是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。我尝试在注册表中搜索,但没有提到任何内容。
可悲的是,我没有看到任何简单的方法来获得使用的确切命令行。我使用构建工具。
思想?
答案 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
或编辑您的构建定义:
答案 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进行命令开发,我没有编辑构建定义的权限。我通过删除调用VS110COMNTOOLS
和VS120COMNTOOLS
的环境变量解决了这个问题。我认为它是与我的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
要查找其他版本。