12

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

4

2 回答 2

5

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

  • 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) 的功能非常有限。如果这还不够,那么针对dnx46使用 .NET 4.6 的 ASP.NET 5 和使用 .NET 4.6net46的其他项目的完整 .NET 运行时。

于 2015-10-15T08:56:22.327 回答
0

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

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

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

于 2015-06-02T18:22:20.480 回答