【发布时间】:2019-09-09 15:03:23
【问题描述】:
我安装了 VS 2019 Pro 并尝试编译我们的解决方案只是为了得到这个:
error MSB4226: The imported project "C:\Program Files (x86)\Microsoft
Visual Studio\2019\Professional\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications\Microsoft.WebApplication.targets" was not found. Also, tried
to find "WebApplications\Microsoft.WebApplication.targets" in the fallback search path(s) for $(VSToolsPath) - "C:\Program Files (x86)\MSBuild\Mi
crosoft\VisualStudio\v15.0" . These search paths are defined in "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\
Bin\MSBuild.exe.Config". Confirm that the path in the <Import> declaration is correct, and that the file exists on disk in one of the search paths
这就是它发生的原因:
- 我们的项目都包含以下导入声明:
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.VisualStudioVersion.v*.Common.props" Condition="'$(VSToolsPath)' == ''" /> MSBuildExtensionsPath = C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuildMSBuildToolsVersion = Current- 文件夹
$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)确实存在,见下文。
$(MSBuildExtensionsPath)\$(MSBuildToolsVersion):
C:\> dir "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current"
Directory: C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 6/13/2019 9:11 PM Bin
d----- 5/27/2019 4:42 PM Imports
d----- 5/27/2019 4:41 PM Microsoft.Common.targets
d----- 5/27/2019 4:42 PM SolutionFile
-a---- 5/27/2019 4:38 PM 13606 Microsoft.Common.props
-a---- 5/27/2019 4:38 PM 789 Microsoft.VisualStudioVersion.v15.Common.props
-a---- 5/27/2019 4:38 PM 2029 THIRDPARTYNOTICES.txt
C:\>
所以,VS 2019 实际上加载了Microsoft.VisualStudioVersion.v15.Common.props。里面是什么?观察:
C:\> cat "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Microsoft.VisualStudioVersion.v15.Common.props"
<!--
***********************************************************************************************
Microsoft.VisualStudio.v15.Common.props
WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
created a backup copy. Incorrect changes to this file will make it
impossible to load or build your projects from the command-line or the IDE.
Copyright (C) Microsoft Corporation. All rights reserved.
***********************************************************************************************
-->
<Project>
<PropertyGroup>
<VisualStudioVersion>15.0</VisualStudioVersion>
<VSToolsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
</Project>
C:\>
所以,最后VSToolsPath 是C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VisualStudio\v15.0 这显然是错误的,因为不存在这样的目录。存在的是 v16.0。
无论如何,这一切的根本原因似乎是 c:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild 向世界传达了 MSBuild 15 是要使用的版本而不是 MSBuild 16。
我错过了什么?
【问题讨论】:
-
您可以选择删除语句
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.VisualStudioVersion.v*.Common.props" Condition="'$(VSToolsPath)' == ''" />或将其移动到正确的位置,但不是xx.csproj 文件的最顶部。不知道为什么你需要这个语句,因为在 VS2017 和 VS2019 中,创建一个新的 web 应用程序并检查它的项目文件,这个语句不是必需的。 -
我需要一点时间来消化你的回答。
-
在构建过程中,msbuild会按照从头到尾(line1到end line)的顺序读取xx.csproj。所以如果你把额外的语句放在VSToolsPath属性的定义上面,这会影响正常的构建逻辑,我认为会导致这个问题。我不确定您添加该语句的原因,但是在 VS2017 和 VS2019 中,我认为在项目文件的正常结构中没有必要。那么解决问题的简单方法是删除该语句。
标签: visual-studio msbuild visual-studio-2019