.NET(标准,核心和框架):开发跨平台应用程序

Hus*_*man 5 .net .net-core .net-standard

我已经搜索过SO,但是我找到了很多答案,但没有针对我的问题:

正如定义所说:

  • .NET Framework 4.6是适用于与.NET相关的所有内容的完整框架,但缺少针对多平台(Windows,Linux和Mac)和云部署进行了优化的库和运行时。
  • 另一方面,.NET Core是.NET Framework 4.6的子集,主要针对多平台和云部署进行了优化。
  • NET标准:一组“标准”的API,而不是平台。因此,基本上,您无需关心平台,只需关心标准(1.3、1.6版...),您的代码即可在支持该平台的所有平台上运行。

为了开发跨平台应用程序,我打算创建ASP.NET核心应用程序(.NET),该应用程序可能引用其他可能使用的类库:

  • .NET标准
  • .NET核心

我假设如果我使用任何(标准或核心)应用程序仍将支持其他操作系统。

在某些情况下,我看到人们在类库中使用带有.NET Standard的传统.NET Framework吗?

  • 在这种情况下,使用.NET Framework时应用程序是否仍跨平台?
  • 什么时候应该混合使用(标准版,核心版,NET版)?
  • 在框架之间使用和混合的最佳实践是什么?
  • 如何避免任何冲突和建造失败?

例如,假设我有一个包含project.json的类库:

 "dependencies": {
    "Microsoft.Extensions.Caching.Abstractions": "1.0.0",
    "Microsoft.Extensions.Options": "1.0.0",
    "StackExchange.Redis.StrongName": "1.1.608",
    "NETStandard.Library": "1.6.0"
  },
  "frameworks": {
    "netstandard1.5": { }
  }
Run Code Online (Sandbox Code Playgroud)

依赖性与框架有何不同?以及标准库只是一个规范,项目如何解决装配问题。

svi*_*ick 3

在这种情况下,使用.NET Framework时应用程序是否仍然是跨平台的?

事实并非如此,.Net Framework 应用程序无法在 .Net Core 上运行。但它可能在单声道上运行,可在 Linux 和 Mac OS 上使用。

我什么时候应该混合使用组合(标准、核心、NET)?

如果可以的话,您应该为您的库使用 .Net Standard(即只要它们没有任何特定于框架的依赖项)。

如果应用程序具有特定于 .Net Framework 的依赖项或者应用程序只能运行于 Windows,则可以将 .Net Framework 用于应用程序。

如果您的应用程序需要跨平台,或者您想使用最新的 API,则可以将 .Net Core 用于您的应用程序。(.Net Core 通常比 .Net Framework 更新得更快,并且也有预览版本。)

使用和混合框架的最佳实践是什么?

我不明白这个问题。您不能在同一应用程序中混合使用 .Net Framework 和 .Net Core。

如何避免任何冲突和构建失败?

我不认为这是一个可以回答的问题,尽管我可以提供一些明显的建议:

  • 阅读并遵循文档。
  • 不要使用不稳定的技术。(请记住,.Net Core 工具目前仍处于预览阶段。)

编辑:

依赖关系与框架有何不同?

"frameworks": { "netstandard1.5": { } }表示该库是 .Net Standard 1.5 库,并决定可以在哪些框架中使用它。

"dependencies": { "NETStandard.Library": "1.6.0" }实际上引入了属于 .Net 标准库一部分的包。这也意味着该库可以访问所有 .Net 标准库,而不仅仅是其中的某些子集。

由于标准库只是一个规范,因此项目如何解析程序集?

所依赖的包NETStandard.Library不仅仅是一个规范。例如,该包System.IO.Compression.ZipFile包含:

  • 用于编译的参考程序集(即规范)
  • ZipFile.Net Framework 4.6的实现,仅转发到System.IO.Compression.FileSystem框架程序集
  • .Net Core 的实现,它实际实现了ZipFile

(要亲自查看包内部,我推荐NuGetPackageExplorer。)