运行 不同框架上的 .NET Standard 二进制文件
Running .NET Standard binaries on different frameworks
我了解以 .NET Standard 2 为目标意味着介于 .net 核心、mono 和完整 .net 框架之间的框架,但我想了解这对不同框架创建的二进制文件意味着什么。
因此,如果我创建一个针对 .NET Standard 2 的控制台程序并使用 .NET Framework 进行编译,是否只能使用完整的 .NET Framework 运行 这个文件?如果他们可以 运行 所有文件,我将如何 运行 使用完整框架或 Mono 的 .NET Core .dll
可执行控制台?
所以基本上每个框架(针对 .NET Standard)创建的二进制文件能够 运行 使用其他框架?
我相信 Comparison to Portable Class Libraries 部分可能说得最好:
.NET Standard is the replacement for Portable Class Libraries (PCL).
.NET Standard 本身不是 runtime 它是一种用于多个不同运行时的类型转发机制。因此,在 .NET Standard 中只能创建 non-executable class 库,就像 PCL 一样。
这使得 class 库可以被针对特定运行时(.NET Framework、.NET Core、Xamarin.iOS、Mono 等)的可执行程序集使用。
从 classes 和接口的角度考虑这一点会很有帮助。在pseudo-code中,.NET Standard是.NET Framework和.NET Core实现的接口。
public interface INetStandard
{
// Only has API definitions
}
public class NetFramework : INetStandard
{
// .NET Framework Runtime implemented here
}
public class NetCore : INetStandard
{
// .NET Core Runtime implemented here
}
这使得可以将 .NET Standard 与 .NET Framework 或 .NET Core 一起使用,但是 .NET Standard 本身没有运行时,只有一组可以在运行时之间共享的 API。您可以在您的项目中以这三者中的任何一个为目标,但您不能执行 .NET Standard,就像您不能实例化接口一样。
Unfortunately, you are not the first to have asked about this and unless Microsoft makes the documentation more clear that .NET Standard does not actually execute, you likely won't be the last.
我了解以 .NET Standard 2 为目标意味着介于 .net 核心、mono 和完整 .net 框架之间的框架,但我想了解这对不同框架创建的二进制文件意味着什么。
因此,如果我创建一个针对 .NET Standard 2 的控制台程序并使用 .NET Framework 进行编译,是否只能使用完整的 .NET Framework 运行 这个文件?如果他们可以 运行 所有文件,我将如何 运行 使用完整框架或 Mono 的 .NET Core .dll
可执行控制台?
所以基本上每个框架(针对 .NET Standard)创建的二进制文件能够 运行 使用其他框架?
我相信 Comparison to Portable Class Libraries 部分可能说得最好:
.NET Standard is the replacement for Portable Class Libraries (PCL).
.NET Standard 本身不是 runtime 它是一种用于多个不同运行时的类型转发机制。因此,在 .NET Standard 中只能创建 non-executable class 库,就像 PCL 一样。
这使得 class 库可以被针对特定运行时(.NET Framework、.NET Core、Xamarin.iOS、Mono 等)的可执行程序集使用。
从 classes 和接口的角度考虑这一点会很有帮助。在pseudo-code中,.NET Standard是.NET Framework和.NET Core实现的接口。
public interface INetStandard
{
// Only has API definitions
}
public class NetFramework : INetStandard
{
// .NET Framework Runtime implemented here
}
public class NetCore : INetStandard
{
// .NET Core Runtime implemented here
}
这使得可以将 .NET Standard 与 .NET Framework 或 .NET Core 一起使用,但是 .NET Standard 本身没有运行时,只有一组可以在运行时之间共享的 API。您可以在您的项目中以这三者中的任何一个为目标,但您不能执行 .NET Standard,就像您不能实例化接口一样。
Unfortunately, you are not the first to have asked about this and unless Microsoft makes the documentation more clear that .NET Standard does not actually execute, you likely won't be the last.