1.4 常见问题解答

问题一:.NET Standard和.NET Core有什么区别?

.NET Core是一个可以执行托管代码的运行时平台。像.NET Framework或UWP(旧称WinRT)一样,开发人员可以将应用程序放在运行时上运行。

.NET Standard是许多.NET平台共享的一组API,因此,它是应用程序可以被不同运行时之间共享和迁移的标准。.NET Standard项目虽然也可以被编译,但是二进制文件不能直接执行。

问题二:.NET Standard的类库可以引用基于.NET Framework的类库吗?

对于支持.NET Standard 2.0的类库来说,是可以的。对于支持.NET Standard 2.0之前标准的类库来说,多数情况下是会有问题的。如果应用程序是基于mscorlib之上的Portable Class Library的,那么可以使用.NET Standard定义的全新兼容迁移类库标准Microsoft.NETCore.Portable.Compatibility来替换。但是仍然会有很多API差异,用户可能会遇到运行时错误,所以不建议使用这种方法。

问题三:.NET Framework类库可以引用支持.NET Standard的类库吗?

.NET Standard 1.5,1.6和2.0中仅有一小部分API不兼容NET Framework 4.6.1和4.6.2。因为仅仅是NET Standard的一小部分,所以绝大多数情况下仍然可以正常工作。缺少的API将在未来的.NET Framework版本中添加。

问题四:现在编写的应用程序应该支持.NET Standard吗?

如果您正在编写一个exe可执行应用程序,那么就不需要考虑支持。如果您正在编写一个通用类库,那么就需要考虑支持.NET Standard。具体版本,要看您使用的API对应到.NET Standard的最低版本。.NET Standard的版本越高,意味着对兼容性要求越高,对类库的通用性不利。

问题五:是否已经被纳入.NET Standard的API仍然有可能抛出NotSupportedException?

是的,一般来说,如果某个API在其他平台和框架上完全不支持,那么这个API应该视为是该框架独有的API,不应该被纳入.NET Standard中。但是,有一些API在某几个.NET开发框架中支持,在另外几种不支持,那么这个API仍然可能被集成到.NET Standard之中。对于不支持这个API的平台,就会抛出NotSupportedException异常。

举个例子,.NET Standard 2.0中把AppDomain集成进来,但是Linux操作系统上.NET Core类库就不支持AppDomain.CreateDomain这个方法。

本章主要阐述了.NET Core和.NET Standard的定义和作用,并顺带介绍了一些.NET Core开发和调试时经常使用的工具。从下一章开始,将正式开始.NET Core应用程序调试之旅。