错误 MSB3644 在 Visual Studio 2017 v15.9.51 上找不到框架“.NETFramework,版本=v6.0”的参考程序集

shd*_*hdr 5 target-framework visual-studio-2017 .net-standard-2.0 .net-standard-2.1 .net-6.0

当我尝试构建一个针对许多框架(包括“.net 6.0”和/或 netstandardX.X Visual Studio 2017)的项目时。即使在安装了 .NET 6.0 后,该主题的错误仍然发生,其中包括:

  • .NET 运行时 6.xx
  • ASP.NET Core 运行时 6.xx
  • .NET 桌面运行时 6.xx

(x 取决于版本)

此外,解决方案资源管理器的依赖项显示错误(参见屏幕截图)

在此输入图像描述

我安装的sdk与“global.json”文件内容兼容:

{
    "sdk": {
        "version": "6.0.401",
        "allowPrerelease": false,
        "rollForward": "feature"
    }
}
Run Code Online (Sandbox Code Playgroud)

整个错误消息:

严重性代码 说明 项目文件行抑制状态错误 MSB3644 找不到框架“.NETFramework,Version=v6.0”的参考程序集。要解决此问题,请安装此框架版本的 SDK 或 Targeting Pack,或者将您的应用程序重新定位到已安装 SDK 或 Targeting Pack 的框架版本。请注意,程序集将从全局程序集缓存 (GAC) 中解析,并将用于代替引用程序集。因此,您的程序集可能无法正确定位您想要的框架。

但此消息也适用于所有丢失或无法识别的依赖项。

.csproj 文件(目标框架):

<Project Sdk="Microsoft.NET.Sdk">
    
  <PropertyGroup>
    <TargetFrameworks>netstandard2.1;netstandard2.0;net45;net48;netstandard1.5;net40;net35;net20;net6.0</TargetFrameworks>
  </PropertyGroup

  <PropertyGroup Condition="'$(TargetFramework)' == 'net20' ">
    <DefineConstants>$(DefineConstants);LEGACY</DefineConstants>
  </PropertyGroup>

  <PropertyGroup Condition="'$(TargetFramework)' == 'net35' ">
    <DefineConstants>$(DefineConstants);LEGACY</DefineConstants>
  </PropertyGroup>

  <PropertyGroup Condition="'$(TargetFramework)' == 'net40' ">
    <DefineConstants>$(DefineConstants);LEGACY</DefineConstants>
  </PropertyGroup>

  <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.5' ">
    <PackageReference Include="System.Collections.NonGeneric" Version="4.0.1" />
    <PackageReference Include="System.Collections.Specialized" Version="4.0.1" />
    <PackageReference Include="System.Reflection" Version="4.3.0" />
    <PackageReference Include="System.Reflection.TypeExtensions" Version="4.1.0" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies.net20" Version="1.0.3" Condition="'$(TargetFramework)' == 'net20' ">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies.net35" Version="1.0.3" Condition="'$(TargetFramework)' == 'net35' ">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies.net40" Version="1.0.3" Condition="'$(TargetFramework)' == 'net40' ">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies.net45" Version="1.0.3" Condition="'$(TargetFramework)' == 'net45' ">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies.net48" Version="1.0.3" Condition="'$(TargetFramework)' == 'net48' ">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
  </ItemGroup>

</Project>
Run Code Online (Sandbox Code Playgroud)

shd*_*hdr 4

无需任何更改,并依赖于此:

VS2019 不支持 .NET 6。

我安装了 Visual Studio 2022 并且项目构建成功。

依赖项命名保持问题中的原样。

vs2022 解决方案资源管理器依赖项

因此,解决方案是通过从 .csproj 文件上的目标框架中删除 .NET6.0 来删除它的依赖项,或者安装 Visual Studio 2022。