我正在通过命令行而不是在 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。我尝试通过注册表搜索,但什么也没找到。
可悲的是,我没有看到任何简单的方法来获得使用的确切命令行。我使用构建工具。
想法?
我遇到了同样的问题并找到了更简单的解决方案
这是由于 Vs2012 在 csproj 文件中添加了以下内容:
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
您可以安全地删除该部分,您的解决方案将构建。
正如 Sielu 指出的,您必须确保 .proj 文件以
否则,如果您需要使用 webdeploy 或使用构建服务器,上述解决方案将不起作用,但您可以在构建脚本中指定
或编辑您的构建定义:
https://i.stack.imgur.com/OvFTQ.png
VisualStudioVersion
属性:
msbuild myproject.csproj /p:VisualStudioVersion=12.0
我也有这个,您可以通过在构建定义中设置工具版本来修复它。
这很容易做到。打开您的构建定义并转到“流程”页面。然后在“3. Advanced”组下,您有一个名为“MSBuild Arguments”的属性。使用以下语法将参数放在那里
/p:VisualStudioVersion=12.0
如果您有更多参数,请用空格而不是逗号分隔它们。
这是密切相关的,但可能会或可能不会解决 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
我刚收到 Kinook 的回复,他给了我一个 link:
基本上,我需要在构建之前调用以下命令。我猜 Visual Studio 2013 不会先自动注册环境,但 2012 做到了,或者我做了并忘记了。
call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86
希望这篇文章对其他人有所帮助。
node-gyp
时找不到 Cpp default.props
的问题! +1
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)' != ''" />
我的 FSharp 目标有这个问题(FSharpTargetsPath 是空的)。
许多路径是参考 VS 版本构建的。
由于各种原因,我们的构建以系统权限运行,并且环境变量“VisualStudioVersion”仅在“用户”级别设置(由 VS 2013 安装程序) - 这很公平。
确保在您正在运行的级别(系统或用户)上将“VisualStudioVersion
”环境变量设置为“12.0
”。
System
查看环境变量,然后选择 Advanced system settings
,最后点击 Environment Variables
在命令行中运行它也可以解决问题。 SETX VisualStudio 版本“12.0”
如果将 Visual Studio 2012 迁移到 2013,则使用 edior 打开 *.csprorj 项目文件。并检查“项目”标签的 ToolsVersion 元素。
那是价值 4.0 你让它达到 12.0
从
到
或者,如果您使用 msbuild 构建,则只需指定 VisualStudioVersion 属性
msbuild /p:VisualStudioVersion=12.0
我正在使用外部构建实用程序。想想像 Ants 这样的东西,如果我对产品的理解正确的话,它只是一个商业版本。我不得不联系制造商以获得答案。
事实证明,项目中有一个全局宏,DEVSTUDIO_NET_DIR。我不得不在那里更改.Net 的路径。他们将各种视觉工作室版本列为“动作”,通过我关闭,但所有的道路都回到了幕后的那个全局变量。如果我有自己的方式,我会将其列为产品的缺陷,除非我在我的理解中遗漏了一些东西。更正那里的路径修复了构建问题。
我安装了 Visual Studio 2013。这对我有用:
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' != ''">12.0</VisualStudioVersion>`
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
因此,我将条件从 ==
更改为 !=
,将值从 10.0
更改为 12.0
。
我有类似的问题。所有建议的解决方案都只是解决这个问题,但没有解决错误来源。如果您使用的是 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
这无需对项目文件进行任何更改即可工作。
我也有同样的错误..我这样做是为了解决它
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" />
改成
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
它完成了。
在我的情况下,我只是通过打开 .csproj 文件来评论下面的行并成功了
.<!-- <Import Project="..\PRPJECTNAME.targets" /> -->
我的问题可能有所不同,但我被拖到这里,但这可能会对某人有所帮助。
我从我的解决方案中选择了一个 Web 项目,并尝试将它作为一个出现问题的独立项目打开,在上面能够解决问题之后。
使用正确版本的 MSBuild。将环境变量设置为:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin
这也适用于 VS 2019 项目
之前我们将其设置为 C:\Windows\Microsoft.NET\Framework\v4.0.30319
在我的例子中,开发环境是 VS2013,我使用的是 TFS 2010。构建的目标是 .NET 4.5.1。我正在为 CI 设置自动构建。每当我尝试上面提到的解决方法时——比如完全删除属性组或替换某些行等。我的构建曾经发生在 TFS 中,但我发布到 azure 时会因“MSDeploy”或有时出现一些不同的错误而失败。我无法同时实现两者。
所以最后我不得不通过 MSBuild 参数来解决这个问题。
转到编辑构建定义 > 流程 > 3. 高级 > MSBuild 参数(设置为)/p:VisualStudioVersion=12.0
它对我有用。
您应该将文件夹 WebApplications 从 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\ 复制到 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\
你会找到
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets
在出现此错误的 csproj 文件中。只需从 csproj 中删除它,然后构建。
解决该问题只需要做一件事:将 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
我 - 将 VisualStudioVersion 变量的 v11.0 值更改为 v10.0 没有任何帮助。没有更改 .csproj 文件中的变量。通过命令提示符设置它没有。 ETC...
最终将该特定版本(v11.0)的本地文件夹复制到我的构建服务器。
我已经尝试了上述所有解决方案,但仍然没有运气。我听说有人在他们的构建服务器上安装 Visual Studio 来修复它,但我只有 5gb 的可用空间,所以我只是将 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio 复制到我的构建服务器并称之为一天.之后开始工作,使用 team city 9.x 和 visual studio 2013。
基于 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> -->
安装一些 VS 组件时出现此错误。不幸的是,这些答案都没有帮助我。我使用 TFS 进行命令开发,我无权编辑构建定义。我通过删除名为 VS110COMNTOOLS
和 VS120COMNTOOLS
的环境变量解决了这个问题。我认为它是与我的 VS 组件一起安装的。
我发现我缺少本地 PC 上的 WebApplications 文件夹,没有像使用 2012 时那样安装 Visual Studio 2017。
就我而言,我使用了错误版本的 MSBuild.exe
。
您需要使用的版本取决于您用于创建项目的 Visual Studio 版本。就我而言,我需要 14.0(使用过 Visual Studio 2015)。
这是在以下位置找到的:
C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe
您可以查看以下内容:
C:\Program Files (x86)\MSBuild
寻找其他版本。