在不同的框架上运行.NET Standard二进制文件

Mla*_*vic 5 .net .net-core .net-standard

我理解目标.NET Standard 2意味着.net core,mono和完整的.net框架之间的框架,但我想了解这对不同框架创建的二进制文件意味着什么.

因此,如果我创建一个面向.NET Standard 2的控制台程序并使用.NET Framework进行编译,那么只有完整的.NET Framework才能运行此文件吗?如果他们都可以运行文件,我将如何.dll使用完整框架或Mono 运行.NET Core 可执行控制台?

那么基本上每个框架(针对.NET标准)创建的二进制文件能够使用其他框架运行吗?

Nig*_*888 11

我相信可移植类库比较部分可能说得最好:

.NET Standard是可移植类库(PCL)的替代品.

.NET Standard本身不是运行时,它是多个不同运行时的类型转发机制.因此,除了PCL的情况之外,不可能在.NET Standard中创建除可执行类库之外的任何内容.

这使得类库可以由针对特定运行时(.NET Framework,.NET Core,Xamarin.iOS,Mono等)的可执行程序集使用.

在类和接口方面考虑这一点很有帮助.在伪代码中,.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
}
Run Code Online (Sandbox Code Playgroud)

这使得.NET Standard可以与.NET Framework或.NET Core一起使用,但.NET Standard本身没有运行时,只有一组可以在运行时之间共享的API.您可以使用项目将三者中的任何一个作为目标,但除了可以实例化接口之外,您不能执行.NET Standard.

不幸的是,你不是第一个问过这个问题的人,除非微软更清楚地说明.NET Standard没有实际执行,否则你可能不会是最后一个.