Как сборки 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?


person Ryan Mann    schedule 10.05.2016    source источник
comment
Это был просто способ запустить проект на ранней стадии и иметь что-то сложное для выпуска в VS2015. Он устарел, как и dnx, ни к чему особо не привязываться. Действительно, лучше подождать, пока осядет пыль.   -  person Hans Passant    schedule 10.05.2016
comment
Спасибо за ответ. Похоже, RC2 должен выйти в этом месяце. Тогда я займусь этим, так как это, вероятно, довольно близко к тому, что будет запущено.   -  person Ryan Mann    schedule 10.05.2016


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

person David Driscoll    schedule 10.05.2016
comment
Ах, в этом есть смысл, так что если я хочу создать решение, на 100% совместимое с кросс-платформой, то мне следует полностью игнорировать полные версии CLR и искать альтернативные способы делать что-то на Core 5? - person Ryan Mann; 10.05.2016