首页 文章

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

提问于
浏览
4

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

正如定义所说:

  • .NET Framework 4.6是与.NET相关的所有内容的完整框架,但缺少针对多平台(Windows,Linux和Mac)和 Cloud 部署进行优化的库和运行时
    另一方面,.NET Core是.NET Framework 4.6的一个子集,主要针对多平台和 Cloud 部署进行了优化

  • NET标准:一组API而不是一个平台 . 所以基本上你不关心平台,只关注标准(版本1.3,1.6 ......),你的代码将适用于支持它的所有平台 .

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

  • .NET标准版

  • .NET Core

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

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

  • 在这种情况下,使用.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": { }
  }

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

1 回答

  • 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工具目前仍在预览中 . )

    EDIT:

    依赖性如何与框架不同?

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

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

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

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

    • 用于编译的参考组件(即规范)

    • 实现 ZipFile for .Net Framework 4.6,它只是转发到 System.IO.Compression.FileSystem 框架程序集
      实现 ZipFile 的.Net Core的

    • 实现

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

相关问题