【问题标题】:.NET (standard, Core and Framework): Developing Cross Platform Applications.NET(标准、核心和框架):开发跨平台应用程序
【发布时间】:2017-03-17 08:55:44
【问题描述】:

我已经搜索过 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 Framework 和 .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": { }
  }

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

【问题讨论】:

    标签: .net .net-core .net-standard


    【解决方案1】:

    在这种情况下,应用程序在使用 .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 框架程序集
    • .Net Core 的实现,它实际上实现了ZipFile

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

    【讨论】:

    • @h.salman 已更新,但一般来说,如果您有新问题,您应该将其作为新问题提出。
    • 谢谢,但我不想问很多与同一主题相关的问题。非常感谢您的回答
    猜你喜欢
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多