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

时间:2016-11-03 16:53:51

标签: .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 Standard
  • .NET Core

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

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

  • 在这种情况下,使用.NET时应用程序是否仍然跨平台 框架?
  • 我应该何时混合使用组合(标准,核心,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": { }
  }

依赖性如何与框架不同?以及项目如何解析程序集,因为标准库只是一个规范。

1 个答案:

答案 0 :(得分: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包含:

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

(要自己查看包装内容,我建议NuGetPackageExplorer。)