Есть ли разница/причина для создания цели построения dnx50 в дополнение к dnx451?
Обычно мы видим следующие цели в project.json
:
"frameworks": {
"net45": {},
"dnx451": {},
"dnxcore50": { }
}
dnxcore50
будет единственной переносимой версией кода проекта, а dnx451
фактически нацелен на .Net 4.5.1 mscorlib и т.д.
Теперь, если я добавлю еще одну цель под названием dnx50
, это создаст допустимый вывод и будет работать нормально.
Разница между dnx451 и dnx50 заключается в том, что она ссылается на разные DLL-сборки 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, фактически создало бы тот же результат, правильно?
Ответы
Ответ 1
Подробнее см. этот. Вот список всех типов, которые вы можете использовать:
-
dnxcore50
- DNX SDK, работающий на CoreCLR/CoreFx
-
dnx451
- DNX SDK, работающий на .Net 4.5.1 (Desktop CLR/Full BCL и FCL)
-
net46
-.Net Framework SDK, работающий на .Net 4.6 (Desktop CLR/Full BCL и FCL).
-
uap10.0
- UWP SDK, работающий на .Net Native/CoreFx
-
dotnet
- любой чистый IL-код, который объявляет свои зависимости (вместо контракта PCL). Рамочные зависимости доступны для .Net 4.6, DNX или UWP.
Для .NET 4.5 вам нужно использовать dnx45
для проектов ASP.NET и net45
для других проектов, предназначенных для .NET 4.5. Какая из ваших целей зависит от того, что вы хотите сделать, вы можете даже напасть на более чем один за раз.
В настоящее время .NET Core (DNX) имеет очень ограниченную функциональность. Если это не дает вам достаточно, то настройте полную .NET runtime dnx46
для ASP.NET 5 с использованием .NET 4.6 и net46
для других проектов с использованием .NET 4.6.
Ответ 2
Имена, которые вы задаете для целей сборки, являются вашими собственными, и вы можете использовать любое имя, которое вы выберете, чтобы это работало нормально.
Цели построения также генерируют глобальные операторы #define верхнего регистра, которые вы можете использовать для брекетинга логических блоков #if DNXCORE50 в вашем коде.
Однако, хотя он будет работать, я считаю хорошей идеей придерживаться официальных целей, которые Microsoft предоставляет, чтобы они не создавали проблемы с компоновкой проектов. Вы можете создавать новые цели, но тогда любое потребительское приложение также должно реально использовать эти цели. Поэтому в ваших собственных проектах, которые будут работать нормально, но если это какой-то общий проект, вам нужно убедиться, что вы документируете пользовательские цели сборки.