通常我们会在project.json
中看到以下目标:
"frameworks": {
"net45": {},
"dnx451": {},
"dnxcore50": { }
}
dnxcore50
将是项目代码的唯一可移植版本,dnx451
实际上是.Net 4.5.1 mscorlib等...
现在,如果我添加另一个名为dnx50
的目标,这将创建一个有效的输出并且工作正常。
dnx451和dnx50之间的区别在于,它引用了不同的.Net程序集dll
例如mscorlib.dll
:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\mscorlib.dll
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目标实际上会产生相同的输出,对吧?
答案 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逻辑块包围。
然而,虽然它会起作用,但我认为坚持微软提供的官方目标是一个好主意,以免它创建项目链接问题。您可以创建新目标,但任何消费应用程序也必须实际能够使用这些目标。所以在你自己的项目中工作正常,但如果它是某种通用项目,你需要确保你记录自定义构建目标。