#c# #visual-studio #nuget #.net-core
#c# #visual-studio #nuget #.net-core
Вопрос:
У меня есть библиотека, написанная полностью.NET и я переношу его на .NET Core. Я намерен настроить его на .netstandard1.1 (чтобы он также был совместим с .NET45).
Когда я создаю проект с помощью Visual Studio, он автоматически зависит от NETStandard.Пакет библиотеки nuget.
Моей библиотеке нужны только два пакета:
- System.Runtime
- System.Runtime.Службы взаимодействия
Два вопроса :
-
Нужно ли мне ограничивать зависимости моего проекта только этими двумя пакетами? Перефразировано: может быть, nuget (или Visual studio, или другой волшебный материал) может самостоятельно ограничивать только необходимые пакеты, а не полный NETStandard.Библиотека?
-
Если ответ на первый вопрос отрицательный, стоит ли выполнять это ограничение?
Заранее спасибо. (Извините за мой английский, я не являюсь носителем языка)
Комментарии:
1. Вы не должны сожалеть. Ваш английский в порядке.
Ответ №1:
В вашем вопросе есть некоторые аспекты…
- Выбор
netstandard1.1
фреймворка ограничит вашу доступную поверхность API в редакторе (здесь VS Code) тем, что доступно в этой версии. Только что протестировано сFile.OpenRead
помощью VS Code дляnetstandard1.1
(недоступно) иnetstandard1.6
(доступно). NETStandard.Library
Зависимость (версия 1.6 подходит для обоих случаев) является зависимостью от пакета. Как только сборка будет скомпилирована, сама сборка объявит внешние сборки (иначе называемые ссылочными сборками), которые фактически использовались (например, System.Runtime и System.Linq), а не все сборки, найденные вNETStandard.Library
мета-пакете.
Пока вы не упаковываете его для NuGet, ограничения ссылок на сборку в любом случае выполняются за вас. Однако упаковка NuGet будет ссылаться на NETStandard.Library
пакет
Если вы используете NuGet и это сокращение важно для вас, я думаю, правильным термином будет обрезка зависимости NuGet, описанный здесь ручной процесс (краткая версия: скопируйте все ссылки из мета-пакета и удалите все, что вы не используете).
Комментарии:
1. Действительно, моя библиотека будет доступна через NuGet, вот почему я хотел «обрезать» (спасибо за термин ^^) бесполезные зависимости. Но хорошо знать, что это не обязательно при использовании ссылок на проекты. Что касается процесса trim, Visual Studio теперь может находить требуемые зависимости NuGet из кода. Поэтому, когда придет время обрезать ваши зависимости, просто удалите
NETStandard.Library
и используйтеShow potential fix
там, где ваша библиотека не компилируется.2. Небольшая подсказка из последних обновлений: используйте netstandard1.4 максимум. 1.5 и 1.6 сломаются к 2.0
Ответ №2:
- Я не уверен, что это ошибка VS, однако, похоже, VS не нравится создавать библиотеку и не
NETStandard.Library
включать пакет 🙂 Итак, нет. - Если вы не используете Visual Studio Code или Notepad и т. Д. это замедлит вашу разработку, поскольку VS помешает вам создавать проект и т. Д. Итак, снова нет.
Итог. Преждевременная оптимизация может вызвать больше проблем, чем пользы. Сначала перенесите свою библиотеку и только потом проверьте, нужно ли ее оптимизировать.
Комментарии:
1. Что касается вашего первого пункта, у меня нет никаких проблем с созданием моей библиотеки без
NETStandard.Library
. Это известная проблема или вы столкнулись с ней недавно? Я используюVisual Studio Community 2015 Update 3
с.NET Core 1.0.1 - VS 2015 Tooling Preview 2
. Возможно, в вашей настройке что-то не так?2. Похоже, это был просто временный сбой в VS… Теперь компилируется правильно.