.NET(标准、核心和框架):开发跨平台应用程序
.NET (standard, Core and Framework): Developing Cross Platform Applications
我搜索了 SO,但我找到了很多答案,但没有针对我的问题:
正如定义所说:
- .NET Framework 4.6 是与 .NET 相关的所有内容的完整框架,但缺少针对多平台(Windows、Linux 和 Mac)优化的库和运行时,并且云部署
- .NET Core 另一方面是 .NET Framework 4.6 的一个子集,它
主要针对多平台和云部署进行了优化
- NET 标准:一组 'standard' API 而不是一个平台。所以
基本上你不关心平台,只关心标准(版本
1.3、1.6 ...),您的代码将在所有支持它的平台上运行。
为了开发跨平台应用程序,我打算创建 ASP.NET 可能引用其他 class 可能使用的库的核心应用程序 (.NET):
- .NET 标准
- .NET 核心
我假设如果我使用任何(标准或核心)我的应用程序仍将支持其他 OS。
在某些情况下,我看到人们在 class 库中使用带有 .NET Standard 的传统 .NET Framework?
- 这样的话,使用.NET时应用程序是否仍然是跨平台的?
框架?
- 我什么时候应该混合使用组合(标准、核心、NET)?
- 使用和混合框架的最佳实践是什么?
- 如何避免任何冲突和构建失败?
例如,假设我有一个 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。)
我搜索了 SO,但我找到了很多答案,但没有针对我的问题:
正如定义所说:
- .NET Framework 4.6 是与 .NET 相关的所有内容的完整框架,但缺少针对多平台(Windows、Linux 和 Mac)优化的库和运行时,并且云部署
- .NET Core 另一方面是 .NET Framework 4.6 的一个子集,它 主要针对多平台和云部署进行了优化
- NET 标准:一组 'standard' API 而不是一个平台。所以 基本上你不关心平台,只关心标准(版本 1.3、1.6 ...),您的代码将在所有支持它的平台上运行。
为了开发跨平台应用程序,我打算创建 ASP.NET 可能引用其他 class 可能使用的库的核心应用程序 (.NET):
- .NET 标准
- .NET 核心
我假设如果我使用任何(标准或核心)我的应用程序仍将支持其他 OS。
在某些情况下,我看到人们在 class 库中使用带有 .NET Standard 的传统 .NET Framework?
- 这样的话,使用.NET时应用程序是否仍然是跨平台的? 框架?
- 我什么时候应该混合使用组合(标准、核心、NET)?
- 使用和混合框架的最佳实践是什么?
- 如何避免任何冲突和构建失败?
例如,假设我有一个 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。)