Есть ли разница/причина для создания цели сборки dnx50 в дополнение к dnx451?

Обычно мы видим следующие цели в project.json:

"frameworks": {
    "net45": {},
    "dnx451": {},
    "dnxcore50": { }
}

dnxcore50 будет единственной переносимой версией кода проекта, а dnx451 на самом деле нацелена на .Net 4.5.1 mscorlib и т.д...

Теперь, если я добавлю еще одну цель с именем dnx50, это создаст правильный вывод и будет работать нормально.

Разница между dnx451 и dnx50 заключается в том, что он ссылается на разные DLL сборки .Net.

Например 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 Portable?

Или на самом деле достаточно цели dnx451, и если мне не нужна конкретная функция из более поздних версий .net (4.5.2, 4.6), эта цель все равно будет использовать .net 4.6, если он установлен в системе, и я просто ориентируюсь на самую низкую версию, необходимую для моего проекта?

Означает ли это, что наличие обеих целей, dnx451 и dnx50, на самом деле создаст один и тот же результат, верно?


person MichaC    schedule 02.06.2015    source источник


Ответы (2)


Полную информацию см. в этом вопросе. Вот список всех различных типов, которые вы можете использовать:

  • 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 dnx46 для ASP.NET 5 с использованием .NET 4.6 и net46 для других проектов с использованием .NET 4.6.

person Muhammad Rehan Saeed    schedule 15.10.2015

Имена, которые вы даете целям сборки, являются вашими собственными, и вы можете использовать любое имя, которое вы выберете, так что это будет работать нормально.

Цели сборки также генерируют глобальные операторы #define в верхнем регистре, которые вы можете использовать для брекетинга логического блока #if DNXCORE50 в своем коде.

Тем не менее, хотя это будет работать, я думаю, что было бы неплохо придерживаться официальных целей, которые предоставляет Microsoft, чтобы не создавать проблемы с связыванием проектов. Вы можете создавать новые цели, но тогда любое потребляющее приложение также должно иметь возможность использовать эти цели. Таким образом, в ваших собственных проектах это будет работать нормально, но если это какой-то общий проект, вам необходимо убедиться, что вы документируете пользовательские цели сборки.

person Rick Strahl    schedule 02.06.2015