Как сборки net451 работают в проекте.JSON на DNX?
В последнее время я возился с изучением DNX и.Net Core 5. Однако я запутался, почему net451 доступен в проекте.Json.
Насколько я понимаю, DNX-совместимые проекты компилируются, чтобы быть кроссплатформенными против.Net Core 5.
Что произойдет, если я добавлю ссылку, чтобы сказать "System.Configuration" в моем проекте DNX, в результате чего он появится в разделе net451 в Json.
Это просто не сможет построить кроссплатформенный? Или я могу использовать только определенные части.Net 4.5.1, которые переносимы на Core 5?
Если взглянуть на это подробнее, похоже, что это целевые платформы, поэтому, хотя я мог бы нацеливаться на 4.5.1 и использовать зависимости 4.5.1, я прав, полагая, что он не будет совместим с DNX, скажем, в Linux?
Просто пытаюсь выяснить, как я собираюсь сейчас создать что-то, что будет совместимо с Core 5 позже.
Должен ли я просто избегать использования чего-либо на Full CLR?
1 ответ
Чтобы ответить на вопрос, который пока DNX находится на выходе, новый dotnet cli
по-прежнему ведет себя очень похоже с project.json
, Единственное, что кардинально меняется, это то, как все вокруг вас строится (dnx компилируется на лету, dotnet cli
очень похоже на MSBuild).
Что произойдет, если я добавлю ссылку, чтобы сказать "System.Configuration" в моем проекте DNX, в результате чего он появится в разделе net451 в Json.
Это просто не сможет построить кроссплатформенный? Или я могу использовать только определенные части.Net 4.5.1, которые переносимы на Core 5?
Как и в большинстве вещей в программировании... это зависит.
Если вы добавите его специально к frameworkAssemblies
под net451
,
Тогда, если вы используете там класс, вы получите ошибку компилятора для dnxcore50
(скоро будет netstandard1.5
).
Теперь по умолчанию компилятор предоставляет вам несколько встроенных символов компиляции. То, как вы справляетесь с этим, - это делать что-то вроде...
#if NET451
using System.Configuration;
// your codehere
#else
// do something that supports `dnxcore50` or throw a not supported exception, etc.
#endif
В основном, если вы хотите построить что-то полностью кроссплатформенное, то что-то вроде System.Configuration
это не то, что вы сможете использовать.
Если вы хотите построить что-то, что работает для многих платформ, то вы хотите более высокую точность, когда он работает внутри net451
тогда вы можете использовать условную компиляцию, чтобы попасть туда.