NET Standard против Net Core App: при создании проекта .NET Core (с использованием консоли или библиотеки классов)

#.net #.net-core #console-application #class-library #.net-standard

#.net #.net-core #консоль-приложение #class-library #.net-standard

Вопрос:

Я пытаюсь сделать свои проекты кроссплатформенными. Таким образом, я создал несколько библиотек классов:введите описание изображения здесь

Но, когда я использовал Entity Framework для построения своей базы данных, необходимые пакеты nuget не устанавливались, за исключением случаев использования в консольном приложении.

Вот разница, консольное приложение ссылается на .NET Core: введите описание изображения здесь

И библиотека классов ссылается на NET Standard:

введите описание изображения здесь

Итак, почему они оба находятся под .NET Core, но ссылаются на разные библиотеки? Являются ли они кроссплатформенными или только консолью, использующей .NET Core? И следует ли мне избегать использования библиотек классов в этом случае?

Комментарии:

1. Я нашел это: — NET Standard libraries — это следующая версия PCL: s, и они оба являются кроссплатформенными. — NET Core — это кроссплатформенная альтернатива .NET Framework (только для Windows). Но все же этого недостаточно для ответа на этот вопрос

Ответ №1:

«Итак, почему они оба находятся под .NET Core, но ссылаются на разные библиотеки?»
Рекомендуемой версией NET для создания библиотек теперь является Net Standard Library. Вот почему по умолчанию при создании библиотеки классов используется версия net standard, а не Net Core. Вы можете изменить это вручную, но не рекомендуется См. Также Это сообщение в блоге о представлении стандартной библиотеки .NET.

Являются ли они кроссплатформенными или только консолью, использующей .NET Core?
Да, они оба кроссплатформенные.

И следует ли мне избегать использования библиотек классов в этом случае?
Нет, обязательно используйте библиотеки классов каждый раз, когда это возможно. Изначально Microsoft не планировала этого, но позже они передумали, поэтому не все пакеты еще совместимы.net standard вот почему вы не можете использовать версию net standard для создания проекта scaffold, потому что «Microsoft.EntityFrameworkCore.Инструменты» на данный момент совместимы только с Net core, но, вероятно, скоро будут совместимы со стандартом DotNet

Как я уже сказал, если вы действительно хотите сохранить опцию scaffold, вы можете использовать проект библиотеки классов и вручную изменить в project.json версию .net, а затем, когда она будет совместима, вы можете вернуться к .net standard. Другие ваши проекты, такие как уровень сервиса или данных, в зависимости от того, как вы хотите сохранить разделение, могут быть библиотекой классов со стандартом dotnet, и они смогут работать правильно.

Или вы могли бы создать консольное приложение (.net core), созданное из вашего исходного решения, и скопировать и вставить в вашу реальную библиотеку классов с помощью .net standard. (Это то, что мы сейчас делаем в project)