除了dnx451之外,是否存在创建dnx50构建目标的差异/原因?

时间:2015-06-02 15:25:27

标签: .net asp.net-core dnx

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

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

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

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

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

例如mscorlib.dll

  • dnx451 引用C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\mscorlib.dll
  • dnx50 引用C:\Windows\Microsoft.NET\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll,基本上是.net 4.6版本。

现在的问题是:

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

dnx451目标实际上是否已足够,如果我不需要更新的.net版本(4.5.2,4.6)中的特定功能,则此目标将使用.net 4.6,如果它已安装在系统上,我只是针对项目所需的最低版本?

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

2 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:0)

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

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

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