0

最近我一直在修补学习 DNX 和 .Net Core 5。但是我对为什么在 project.Json 中可以使用 net451 感到困惑。

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

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

它会无法构建跨平台吗?还是我只能使用可移植到 Core 5 的某些 .Net 4.5.1 部分?

仔细研究一下,看起来那些是目标框架,所以虽然我可以定位 4.5.1 并使用 4.5.1 依赖项,但我认为它与 Linux 上的 DNX 不兼容是否正确?

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

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

4

1 回答 1

1

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

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

它会无法构建跨平台吗?还是我只能使用可移植到 Core 5 的某些 .Net 4.5.1 部分?

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

如果您专门将其添加frameworkAssembliesnet451.

然后,如果你在那里使用一个类,你会得到一个编译器错误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那么您可以使用条件编译来实现。

于 2016-05-10T20:33:17.033 回答