Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 无法使用VS 2019构建web应用程序_Visual Studio_Msbuild_Visual Studio 2019 - Fatal编程技术网

Visual studio 无法使用VS 2019构建web应用程序

Visual studio 无法使用VS 2019构建web应用程序,visual-studio,msbuild,visual-studio-2019,Visual Studio,Msbuild,Visual Studio 2019,我安装了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, t

我安装了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
因此,VS2019实际上加载了
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:\>
C:\>cat“C:\Program Files(x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Microsoft.VisualStudioVersion.v15.Common.props”
15
$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
C:\>
因此,最后的
VSToolsPath
C:\ProgramFiles(x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VisualStudio\v15.0
,这显然是错误的,因为不存在这样的目录。现有的是v16.0

无论如何,所有这一切的根本原因似乎是
c:\ProgramFiles(x86)\Microsoft Visual Studio\2019\Professional\MSBuild
向世界传达了MSBuild 15是要使用的版本,而不是MSBuild 16

我错过了什么

我们的项目都包括以下导入声明:

我猜问题的根本原因是您将语句置于
VSToolsPath
property的定义之上

在VS2019中创建一个简单的asp.net web应用程序(.net framework),其结构如下所示:

<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />

  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    ...
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    ...
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    ...
  </PropertyGroup>

  <ItemGroup>
    ...
  </ItemGroup>

  <!--Position 1-->
  <!--<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.VisualStudioVersion.v*.Common.props" Condition="'$(VSToolsPath)' == ''" />--> <!--Position 1-->
  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> <!--This is where the VSToolsPath is defined.-->
  </PropertyGroup>

  <!--Position 2-->
  <!--<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.VisualStudioVersion.v*.Common.props" Condition="'$(VSToolsPath)' == ''" />--> <!--Position 2-->
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" /> <!--This is where the error finally occurs.-->
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
  <ProjectExtensions>
    ...
  </ProjectExtensions>
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. ...-->
</Project>
因此,如果将语句添加到$(VSToolsPath)的第一个定义之上,如位置1,则会出现此错误。如果将语句添加到$(VSToolsPath)定义下方和Microsoft.WebApplication.targets导入的
上方,如位置2,则所有语句都可以正常工作

更新1:

关于导入元素的信息,请参见导入的项目按照导入的顺序进行检查。

更新2:


来自标记的提示,我在msbuild中发布了一个问题

对我来说,以下方法奏效了

在csproj文件中

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

被替换为

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" />


您可以选择删除语句
或将其移动到正确的位置,但不能移动到xx.csproj文件的最上面。不确定为什么需要此语句,因为在VS2017和VS2019中,创建一个新的web应用程序并检查其项目文件,此语句不是必需的。我需要一点时间来消化您的答案。在生成过程中,msbuild将按照从头到尾(第1行到第2行)的顺序读取xx.csproj。因此,如果您将额外的语句放在VSToolsPath属性的定义之上,这将影响正常的构建逻辑,我认为这会导致这个问题。我不确定您添加该语句的原因,但在VS2017和VS2019中,我认为在项目文件的正常结构中没有必要添加该语句。然后,解决问题的简单方法是删除该语句。我从代码中删除了
,并确保每个项目都导入Microsoft.Common.props。但我仍然认为c:\Program Files(x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current包含目录15而不是16,并且有一个文件Microsoft.VisualStudioVersion.v15.Common是一个错误。props@mark没错,它应该包含xxx.v16.xxx而不是xxx.v15.xxx,我刚刚检查了不同版本的VS的文件夹结构,对于VS2019,它应该是v16.xxx。因此,这就是为什么您的声明可能在2015年、2017年VS2015年VS2019年VS2019年VS2019年VS2019年VS2015年VS2019年VS2019年VS2019年VS2019年VS2019年VS2019年VS2019年VS2019年VS2019。我会将此问题发布到DC或github/msbuild,然后在更新中共享链接:)谢谢您的回复。
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" /> <!--This is where the error finally occurs.-->
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v15.0\WebApplications\Microsoft.WebApplication.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" />