非托管组件 运行 公共语言运行时

Unmanaged components running Common Language Runtime

我是 C# 的初学者。事实上,几天前才开始学习这门语言。 我正在尝试构建与 C# 相关的 .NET Framework 概念。

我在这里阅读有关 CLR 的内容 https://docs.microsoft.com/en-us/dotnet/framework/get-started/overview

我不明白的是作者说的这部分文字:

The .NET Framework can be hosted by unmanaged components that load the common language runtime into their processes and initiate the execution of managed code, thereby creating a software environment that exploits both managed and unmanaged features. The .NET Framework not only provides several runtime hosts but also supports the development of third-party runtime hosts.

我对 "unmanaged components" 的理解是,它们是使用本机 Windows API 以纯 C/C++ 编写的程序。所以现在这些非托管程序可以将 CLR DLL 加载到它们的程序地址 space 并且可以使 CLR 函数可用,然后这个非托管程序可以加载一个使用 CLR 函数的托管程序可执行文件。对吗?

如果我的理解是正确的,那么我想知道在什么情况下我会这样做?或者为什么我想要一个非托管程序来加载 CLR 和 运行 托管代码?

此外,作者所说的“.NET Framework 不仅提供了几个 运行时间主机也支持开发第三方运行时间主机”?

我认为 CLR 是 .NET Framework 中唯一的 运行时间。

原来Windows都是非托管代码。因此它会加载 .net 框架以允许托管代码 运行。从维护的角度来看,最好使用托管代码。但是,您不想丢弃数百万行非托管工作代码。如果 Microsoft 不提供此功能,用户将不得不重写所有内容。 (不要重写所有内容,请参阅 link)。如果不这样做,用户只会忽略 .net。 https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/