错误 MSB3644:找不到框架“.NETFramework,Version=v4.5”的参考程序集

error MSB3644: The reference assemblies for framework ".NETFramework,Version=v4.5" were not found

我最近升级了我的 Visual Studio 环境,现在我的 .Net 框架似乎有问题,您可以在以下错误消息中看到:

9> C:\Program Files (x86)\Microsoft Visual Studio17\Professional\MSBuild.0\Bin\Microsoft.Common.CurrentVersion.targets(1126,5): error MSB3644: The reference assemblies for framework ".NETFramework,Version=v4.5" were not found. To resolve this, install the SDK or Targeting Pack for this framework version or retarget your application to a version of the framework for which you have the SDK or Targeting Pack installed. Note that assemblies will be resolved from the Global Assembly Cache (GAC) and will be used in place of reference assemblies. Therefore your assembly may not be correctly targeted for the framework you intend.

(数字“9”只是我的 Visual Studio 解决方案中第九个项目的计数器)

让我来解释一下这种情况有什么令人困惑的地方:

当我加载我的解决方案时,我收到以下错误消息:

The C# project ... is targeting ".NETFramework,Version=4.5", which is not installed on this machine. To proceed, select an option below:

我选择第二个选项,得到如下网址:.NET SDKs for Visual Studio

这给出了以下内容:.NET Frameworks 列表:

4.7.1   Developer Pack, included in Visual Studio 2017   Runtime   Release Details
4.7     Developer Pack, included in Visual Studio 2017   Runtime   Release Details
4.6.2   Developer Pack, included in Visual Studio 2017   Runtime   Release Details
4.6.1   Developer Pack, included in Visual Studio 2017   Runtime   Release Details
4.6     Developer Pack, included in Visual Studio 2017   Runtime   Release Details
4.5.2   Developer Pack, included in Visual Studio 2017   Runtime   Release Details
3.5 SP1 Developer Pack, included in Visual Studio 2017   Runtime   Release Details

=> 4.5 在哪里?
我已经不同时间下载了4.5.2版本、Developer Pack和Runtime,但没有任何变化。

所以,过了一会儿,我就关闭了关于丢失目标的对话框。一旦我开始编译项目,我希望得到更易读的错误消息。

接下来,我还调查了我的 PC 的安装(PC 设置、添加和删除程序),这给出了以下列表:

Microsoft .NET Core SDK - 2.1.4 (x64)
Microsoft .NET Framework 4.5 SDK
Microsoft .NET Framework 4.5.1 Multi-Targeting Pack (ENU)
Microsoft .NET Framework 4.5.1 SDK
Microsoft .NET Framework 4.5.2 Multi-Targeting Pack (ENU)
Microsoft .NET Framework 4.6 Targeting Pack
Microsoft .NET Framework 4.6.2 SDK
Microsoft .NET Framework 4.6.2 Targeting Pack
Microsoft .NET Framework 4.7 SDK
Microsoft .NET Framework 4.7 Targeting Pack

=> 好的,似乎没有 4.5 的目标包(似乎只有 SDK),但是该怎么办呢?

错误消息提到重新定位我的应用程序,但这不是问题:我是唯一遇到此问题的人,修改中央应用程序的配置不是解决方案。

错误消息还谈到了所谓的 "Global Assembly Cache",它将用于代替参考程序集。那么,让我们来看看那些东西:

我的 PC 上似乎有两个参考程序集:

C:\Program Files\Reference Assemblies\Microsoft\Framework (seems only to contain "v3.0" and "v3.5" directories)
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.

后者似乎包含一个“.NETFramework”目录,而该目录又包含一个 "v4.5" 子目录,其中包含相当多的 XML 个文件。

然而,错误消息指出未使用这些,而是​​使用 "Global Assembly Cache (GAC)"。如果我尝试找到它,我会找到对 gacutilsn -k ... 和其他程序的引用,这些程序在我的 PC 上找不到指定的 .Net 框架。

如果我使用 Google 查看 "Microsoft .Net Framework 4.5 Targeting Pack"(精确短语),我得到的结果为零。

所以,换句话说,我收到一条关于我的 PC 上缺少软件的消息。我有机会安装它,但安装什么也没做。然后我得到一个关于这个的编译错误,它谈到了一种非常普遍的技术,它似乎不存在于 Google 之后,互联网上最常用的搜索引擎。它提到了一项技术(GAC)可能会被使用或不会被找到,在C:\Program FilesC:\Program Files (x86)上,它对应的工具(gacutil)似乎只存在于我的PC上对于其他版本。

谁能给我一个正确方向的帮助?
提前致谢

与此同时,我已经解决了这个问题,归结为使用计算机工作的普遍真理:

When you have a problem, don't listen to what your computer tells you, but ask yourself what you were doing when the problem arose.

在我的例子中,这意味着以下内容:
当我升级 Visual Studio 版本(使用 Visual Studio 安装程序)时出现问题,因此解决方案包括再次启动 Visual Studio 安装程序,并检查要安装的更多功能(我现在已经检查了很多,以至于我无法弄清楚哪一个完全解决了我的问题。

对话框前面的错误消息只是关于 PC 内部结构的信息,只会导致无法理解的旁路。

我检查并似乎有效的框是 ASP.NET 框架、Office/Sharepoint 开发、Linux 使用 C++ 开发和 Visual studio 扩展开发,所有这些都在工作负载下.在各个包下,我检查了每个 .Net 框架 SDK 和目标包。

最终成功了。