除了 dnx451 之外,是否有任何 difference/reason 来创建 dnx50 构建目标?

Is there any difference/reason to create dnx50 build target in addition to dnx451?

通常我们在project.json中看到以下目标:

"frameworks": {
    "net45": {},
    "dnx451": {},
    "dnxcore50": { }
}

dnxcore50 将是项目代码的唯一可移植版本,dnx451 实际上针对 .Net 4.5.1 mscorlib 等...

现在,如果我添加另一个名为 dnx50 的目标,这将创建一个有效的输出并且工作正常。

dnx451 和 dnx50 的区别在于,它引用了不同的 .Net 程序集 dll

例如mscorlib.dll

现在的问题是:

例如,为您的自定义库创建 dnx50 目标是否有意义?基本上以 .net 4.6 为目标,您需要 dnxcore50 便携版没有的某些功能?

或者 dnx451 目标是否足够,如果我不需要更新的 .net 版本(4.5.2、4.6)中的特定功能,这个目标无论如何都会使用 .net 4.6如果它安装在系统上并且我只是针对我的项目所需的最低版本?

这是否意味着同时拥有 dnx451 和 dnx50 目标实际上会产生相同的输出,对吧?

您为构建目标指定的名称是您自己的名称,您可以使用您选择的任何名称,这样就可以正常工作。

构建目标还会生成全局的大写#define 语句,您可以在代码中使用#if DNXCORE50 逻辑块括弧。

但是,虽然它会起作用,但我认为坚持 Microsoft 提供的官方目标是个好主意,以免造成项目链接问题。您可以创建新目标,但随后任何消费应用程序也必须能够实际使用这些目标。因此,在您自己的项目中可以正常工作,但如果它是某种通用项目,您需要确保记录自定义构建目标。

有关完整详细信息,请参阅 问题。以下是您可以使用的所有不同类型的列表:

  • dnxcore50 - CoreCLR/CoreFx
  • 上的 DNX SDK 运行
  • dnx451 - .Net 4.5.1 上的 DNX SDK 运行(桌面 CLR/完整 BCL 和 FCL)
  • net46 - .Net 4.6 上的 .Net Framework SDK 运行(桌面 CLR/完整 BCL 和 FCL)。
  • uap10.0 - UWP SDK 运行 on .Net Native/CoreFx
  • dotnet - 任何声明其依赖项的纯 IL 代码(而不是 PCL 契约)。框架依赖项可用于 .Net 4.6、DNX 或 UWP。

对于 .NET 4.5,您需要对 ASP.NET 个项目使用 dnx45,对其他项目使用 net45 以面向 .NET 4.5。你瞄准哪个取决于你想做什么,你甚至可以一次瞄准多个。

目前 .NET Core (DNX) 的功能非常有限。如果这还不够,那么针对使用 .NET 4.6 的 ASP.NET 5 的完整 .NET 运行时 dnx46 和使用 .NET 4.6 的其他项目的 net46