use*_*696 27 .net c# windows .net-core dnx
目前正在尝试了解.NET平台标准我发现自己对"不同平台"的想法非常困惑.
我会尽力说清楚.我目前关于.NET Framework的内容是,.NET粗略地说是由CLR,BCL和支持软件组成,用于引导CLR并提供虚拟机和底层操作系统之间的接口.
因此,当我们使用.NET Framework进行编码时,我们确实针对框架的某个版本,因为我们从BCL使用的类型带有框架,因此依赖于特定的版本.
现在,根据我的理解,.NET Core完全不同.并非所有人都挤在一起.我们有CoreCLR,它是运行IL的轻量级VM,CoreFX是正确组织为NuGet包的库,我们到目前为止还提供DNX/DNVM/DNU,它们提供了支持,如启动CoreCLR并与之连接. OS.
无论如何,尽管我们在Windows 7,Windows 8或Windows 10上安装了框架,但我们仍然针对该框架进行编码.
现在,在.NET Platform Standard规范中,我们看到以下定义:
平台 - 例如.NET Framework 4.5,.NET Framework 4.6,Windows Phone 8.1,MonoTouch,UWP等.
我们还看到了一个平台列表,其中包括
现在这让我很困惑.我总是这样说:我们针对.NET Framework进行编码,无论如何,框架都是框架.
但是在这里我们有这些平台,其中.NET框架只是众多平台中的一个.我们有Windows 8,但是等一下,在Windows 8上运行.NET与在任何其他操作系统上运行.NET不同吗?为什么它与.NET Framework 2.0 - 4.6平台分开?
我们还将DNX作为特定平台.这让我想知道:平台是与启动虚拟机和提供操作系统接口相关的"支持"吗?或者平台包括虚拟机?
无论如何,可以看出我很困惑.那些平台到底是什么以及这与我目前对.NET Framework的理解有何关系?另外,为什么.NET Framework 2.0 - 4.6被描述为单独的?除非是.NET Core,否则这里所描述的一切都不是.NET Framework的某些版本?
我们对框架进行编码.
嗯,确定你是.当您在代码中操作字符串时,您将始终使用System.String.并且它(几乎)总是以完全相同的方式和属性表现出相同的行为.
但是显示字符串确实具有您无法忽略的实现细节:
如果这些实施细节无关紧要,那将是可爱的.但不是它在实践中的工作方式,因为.NET在越来越多的设备和操作系统上扩散并变得可用,它也不可避免地变得更加复杂.尽早选择目标,这很重要.
有许多框架(.NET Framework,WinRT,UWP,Silverlight,.NET Core,Windows Phone,Mono,Micro Framework和旧的Compact Framework),而不仅仅是.NET Framework.
新方法是针对支持一个或多个此框架的平台标准进行编程.平台标准定义了一个与一个或多个框架匹配的API.这意味着如果您的应用程序支持平台标准1.1,您可能会支持几乎所有框架.Platform standard 1.4仅支持.NET Framework 4.6.x和.NET Core
请查看此文档:https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md
现在这让我很困惑.我总是这样说:我们针对.NET Framework进行编码,无论如何,框架都是框架.
不,实际上有多个.NET框架或平台可供您调用.在.NET Standard之前,您曾经使用单个框架(可能是完整的框架,目前版本为4.6.3,如果您开发Web应用程序或Windows服务).针对框架的DLL与另一个不兼容.IE为完整的.NET框架开发的DLL无法在Windows Phone 8.1上执行.
这些框架实际上实现了一个非常小的通用库,但也有用于处理它们所针对的平台的特定库.用于管理在完整.NET框架中的IIS上托管的Web服务器的IE库,或用于在Windows Phone 8.1框架中处理移动电话的功能.
在.NET Standard之前是PCL
虽然有一种解决方法,称为PCL,它代表"便携式类库".通过在两个或多个.NET框架中仅使用方法/程序集的小公共子集,可以开发一个可以包含在针对不同框架的项目中的库.例如,PCL配置文件37意味着您希望您的库可以在.NET Framework 4,Silverlight 5和Windows 8项目中使用.
请看一下PCL配置文件及其兼容性列表(我不知道它是否详尽无遗):http://danrigby.com/2014/05/14/supported-pcl-profiles-xamarin-for-视觉工作室-2 /
那么.NET标准呢?
.NET Standard的目标是简化这一过程并摆脱PCL.粗略地说,.NET Standard定义了一个契约(一组类和方法),它将由所有.NET框架实现.如果您开发一个面向.NET Standard的库,您肯定它可以在所有.NET框架上运行.这是它背后的基本理念/目标(尽管它有点微妙).
请查看以下内容以获得准确的兼容性:https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/#user-content-whats-new-in-net-standard -20
如果查看兼容性表,您将看到.NET Framework 4.6.3和.NET Core 1.0应用程序中可以使用面向.NET Standard 1.6的库(无需重新编译).
换句话说,我们可以说.NET Framework 4.6.3和.NET Core 1.0都实现了.NET Standard 1.6契约:它的类和方法.
如果您还希望您的DLL可以在Windows Phone 8.1项目中使用,则必须使用.NET Standard 1.2,它提供的功能少于.NET Standard 1.6(例如,没有System.Net.Sockets).
请参阅此处以获取每个.NET Standard版本中可用命名空间的列表https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md#user-content-list-of -net-corefx的API,和其相关的净平台标准版
归档时间: |
|
查看次数: |
5155 次 |
最近记录: |