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

.NET (standard, Core and Framework): Developing Cross Platform Applications

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

正如定义所说:

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

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

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

例如,假设我有一个 class 库,其中包含 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": { }
  }

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

In this case, Is the application still cross platform when using .NET Framework?

实际上,.Net Framework 应用程序不会 运行 在 .Net Core 上。但它可能 运行 在单声道上,它在 Linux 和 Mac OS.

上可用

When Should I mix and use a combination (Standard , Core, NET)?

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

如果您的应用程序具有特定于 .Net Framework 的依赖关系,或者如果应用程序可以 Windows-only,则您可以将 .Net Framework 用于您的应用程序。

如果你的应用程序需要跨平台,或者如果你想使用最新的 API,你可以为你的应用程序使用 .Net Core。 (.Net Core 通常比 .Net Framework 更新得更快,而且还有预览版。)

What is the best practices in using and mixing between frameworks?

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

How to avoid any conflicts and build failures?

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

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

编辑:

How is the dependency different from framework?

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

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

How is the project resolving the assemblies since the Standard Library is just a specification?

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

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

(要自己查看软件包,我推荐 NuGetPackageExplorer。)