我目前的任务是将代码库移植到.NetCore。从根本上说,这是相当顺利的,但有一件事引起了我的关注,并保持了平台的独立性。
Core可以在Mac和Linux上运行,因此我想确保在我完成后该库也可以在Mac和Linux上运行。但是,为了使工作正常,我发现自己包含了许多非Microsoft.AspNetCore。* nuget包。 (例如System.Diagnostics.Process,System.Net.Http,System.Threading.Thread等)
显然,这不会成为Windows上的一个问题,但我确实想知道是否会引起问题,如果有人针对Linux推荐我的库?
如果它不是问题那么好但是如果是那么我怎么知道哪个nuget包在多平台库中可以正常? (例如,只有AspNetCore才能跨平台工作吗?)
答案 0 :(得分:1)
System。*软件包(通常)来自https://github.com/dotnet/corefx,99.5%的用例将在macOS和(支持的)Linux(发行版)上运行,与在Windows上相同。
是的情况,系统。*包不能按照您期望的方式工作。主要是因为.NET正在添加便利API以包装Windows行为。因此,例如,读取注册表项将不起作用(即使在注册API工作的未来,它肯定不会由合法的配置单元支持,因此读取模糊的值将报告未找到的键)。大多数情况下,如果API无法在Linux / macOS上运行,它将抛出PlatformNotSupportedException
,而不是产生某种意外/错误的结果。
所以,只要您正在做的事情并不特别感觉“Windows-y”,那么netstandard *或netcoreapp * RID的所有内容都应该正常工作。如果没有,您可以随时在corefx github项目中提交问题。