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

时间:2018-02-16 07:33:14

标签: .net .net-core .net-standard

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

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

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

1 个答案:

答案 0 :(得分:7)

我相信__callStatic部分可能说得最好:

  

.NET Standard是Comparison to Portable Class Libraries的替代品。

.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
}

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

  

不幸的是,你并不是第一个提出这个问题的人,除非微软更清楚地说明.NET Standard没有真正执行,否则你可能不会成为最后一个。