Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET平台标准中有哪些平台?_C#_.net_Windows_Dnx_.net Core - Fatal编程技术网

C# .NET平台标准中有哪些平台?

C# .NET平台标准中有哪些平台?,c#,.net,windows,dnx,.net-core,C#,.net,Windows,Dnx,.net Core,目前,我正试图了解.NET平台标准,但我发现自己对“不同平台”的概念相当困惑 我会尽量把我的观点讲清楚。目前我对.NET Framework的看法是,.NET大致上由CLR、BCL和支持软件组成,用于引导CLR并提供虚拟机和底层操作系统之间的接口 因此,当我们使用.NET Framework编写代码时,我们确实针对某个版本的框架,因为我们使用的BCL类型与框架一起提供,因此取决于特定的版本 据我所知,.NETCore是完全不同的。并不是所有的东西都是那样包装在一起的。我们有CoreCLR,它是一

目前,我正试图了解.NET平台标准,但我发现自己对“不同平台”的概念相当困惑

我会尽量把我的观点讲清楚。目前我对.NET Framework的看法是,.NET大致上由CLR、BCL和支持软件组成,用于引导CLR并提供虚拟机和底层操作系统之间的接口

因此,当我们使用.NET Framework编写代码时,我们确实针对某个版本的框架,因为我们使用的BCL类型与框架一起提供,因此取决于特定的版本

据我所知,.NETCore是完全不同的。并不是所有的东西都是那样包装在一起的。我们有CoreCLR,它是一个运行IL的轻量级VM,CoreFX是作为NuGet包正确组织的库,到目前为止,我们有DNX/DNVM/DNU,它提供了启动CoreCLR和与操作系统接口等支持功能

不管怎样,尽管我们在Windows7、Windows8或Windows10上安装了这个框架,我们还是根据这个框架编写代码

现在,在.NET平台标准规范中,我们看到了以下定义:

平台-例如NET Framework 4.5、.NET Framework 4.6、Windows Phone 8.1、MonoTouch、UWP等

之后我们还会看到一个平台列表,其中包括

  • .NET Framework 2.0-4.6
  • 视窗8
  • Windows Phone 8.1
  • 银光4,5
  • .NET Framework 4.5.1-4.6上的DNX
  • .NET Core 5.0上的DNX
这让我完全困惑。我一直认为:我们是针对.NET框架编写代码的,而不管怎样,框架就是框架

但这里我们有这些平台,其中包括.NET framework,它只是众多平台中的一个。例如,我们有Windows 8,但是等一下,在Windows 8上运行.NET与在任何其他操作系统上运行.NET不完全一样吗?为什么它与.NETFramework2.0-4.6平台分离

我们也有DNX作为一个特定的平台。这让我想知道:平台是不是与启动虚拟机和提供操作系统接口相关的“支持材料”?或者平台包括虚拟机

总之,可以看出我很困惑。这些平台到底是什么?这与我目前对.NET框架的理解有什么关系?另外,为什么要单独描述.NETFramework2.0-4.6?这里所描述的一切不是都是.NET Framework的某个版本吗?

有很多框架(.NET Framework、WinRT、UWP、Silverlight、.NET Core、Windows Phone、Mono、Micro Framework和旧的Compact Framework)不仅仅是.NET Framework

新方法是根据支持一个或多个框架的平台标准进行编程。平台标准定义了一个与一个或多个框架匹配的API。这意味着,如果您的应用程序支持平台标准1.1,您可能会支持几乎所有的框架。平台标准1.4仅支持.NET Framework 4.6.x和.NET Core

请查看此文档:

我们根据框架编写代码

嗯,你当然是。在代码中操作字符串时,始终使用System.String。它(几乎)总是以完全相同的方法和属性表现完全相同的方式

但是,显示字符串确实包含您不能真正忽略的实现细节:

  • 如果您想在Linux或OSX上的Unix终端上显示它,那么您需要针对Mono或CoreCLR,即可以在此类操作系统上运行的框架实现
  • 如果您想在Windows应用商店应用程序(又名WinRT,又名Windows 8,又名UWP)中显示它,那么它实际上是一个隐藏在引擎盖下的小玩意儿,一个非常好的隐藏细节,您不必担心。但是确实需要一个UI小工具,比如Windows.UI.Xaml.Controls.TextBlock,一个高度特定于WinRT的类
  • 如果要在浏览器中显示它,则需要将目标定位为ASP.NET或Silverlight,即经过优化以在web服务器上运行或作为浏览器加载项的框架主机
  • 如果你想在一个由小型锂离子电池供电的设备上展示它,比如手机,那么你将不可避免地需要处理一个经过优化的框架版本,以尽可能少地使用电源。这确实会影响你必须编写的代码,燃烧100瓦的代码和让一个小电池保持8小时电量的代码之间有着巨大的区别。除了大量使用async/await之外,您无法直接看到任何东西,但肯定有一些东西严重影响了运行时。需要以Xamarin或WinRT为目标
  • 如果您想在任何操作系统上显示它,那么您确实需要针对一个框架版本,该版本不使用.NET在Windows上使用的那种让EXE启动CLR虚拟机的技巧。这需要dnx.exe,就像用java或python编写的程序使用java.exe或python.exe一样
如果这些实现细节无关紧要,那就太好了。但它的实际工作方式并非如此,随着.NET的普及和越来越多的设备和操作系统的可用性,它也不可避免地变得更加复杂。尽早选择你的目标,这很重要

这让我完全困惑。我一直认为:我们是针对.NET框架编写代码的,而不管怎样,框架就是框架

不,实际上有多种.NET框架或平台,您可以这样称呼它们。在.NET标准之前,您通常以单个框架为目标(如果您开发web应用程序或windows服务,则可能是完整的框架,当前版本为4.6.3)。针对某个框架的DLL与另一个框架不兼容。即,为整个.NET framework开发的DLL不能在Windows phone 8.1上执行

这些框架实际上实现了一组相当小的公共库,b