net451 程序集如何在 DNX 上的 project.JSON 中工作?

How do net451 assemblies work in a project.JSON on DNX?

我最近一直在学习 DNX 和 .Net Core 5。但是我对为什么 net451 在 project.Json.

中可用感到困惑

我的理解是 DNX 兼容项目编译为针对 .Net Core 5 的跨平台。

如果我在我的 DNX 项目中添加对 say "System.Configuration" 的引用,导致它出现在 Json 的 net451 部分中,会发生什么情况。

会不会就是跨平台搭建失败?或者我只能使用可移植到 Core 5 的 .Net 4.5.1 的某些部分吗?

进一步研究,看起来那些是目标框架,所以虽然我可以针对 4.5.1 并使用 4.5.1 依赖项,但我认为它与 DNX 不兼容 Linux?

只是想弄清楚我现在将如何着手构建稍后将与 Core 5 兼容的东西。

我应该避免在 Full CLR 上使用任何东西吗?

为了回答这个问题,虽然 DNX 即将淘汰,但新的 dotnet cli 的行为仍然与 project.json 非常相似。唯一发生巨大变化的是围绕你构建一切的方式(动态编译的 dnx,dotnet cli 与 MSBuild 非常相似)。

What happens if I add a reference to say "System.Configuration" in my DNX project causing it to show up in the net451 section in the Json.

Will it just fail to build cross platform? Or can I only use certain pieces of .Net 4.5.1 that are portable to Core 5?

与编程中的大多数事情一样...这取决于。

如果你专门加到net451下的frameworkAssemblies

然后,如果你在那里使用 class,你将得到 dnxcore50(即将成为 netstandard1.5)的编译器错误。

现在默认情况下,编译器会为您提供一些内置的编译符号。所以你处理的方式是做一些像...

#if NET451
using System.Configuration;
// your codehere
#else
// do something that supports `dnxcore50` or throw a not supported exception, etc.
#endif

基本上,如果您希望构建完全跨平台的东西,那么像 System.Configuration 这样的东西您将无法使用。

如果您希望构建适用于多种平台的东西,但是当它在 net451 中 运行 时您想要更高的保真度,那么您可以使用条件编译来实现。