除了 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
:
- 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 目标实际上会产生相同的输出,对吧?
您为构建目标指定的名称是您自己的名称,您可以使用您选择的任何名称,这样就可以正常工作。
构建目标还会生成全局的大写#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
。
通常我们在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 目标实际上会产生相同的输出,对吧?
您为构建目标指定的名称是您自己的名称,您可以使用您选择的任何名称,这样就可以正常工作。
构建目标还会生成全局的大写#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/CoreFxdotnet
- 任何声明其依赖项的纯 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
。