【问题标题】:Is there any difference/reason to create dnx50 build target in addition to dnx451?除了 dnx451 之外,创建 dnx50 构建目标是否有任何区别/原因?
【发布时间】:2015-06-02 15:25:27
【问题描述】:

通常我们在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 目标实际上会创建相同的输出,对吗?

【问题讨论】:

    标签: .net asp.net-core dnx


    【解决方案1】:

    请参阅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 运行时 dnx46 用于使用 .NET 4.6 的 ASP.NET 5 和 net46 用于使用 .NET 4.6 的其他项目。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-31
        • 1970-01-01
        • 1970-01-01
        • 2017-07-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多