Как сборки 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 тогда вы можете использовать условную компиляцию, чтобы попасть туда.

Другие вопросы по тегам