Добавьте ссылку на dll и добавьте пакет NuGet в проект .NET Standard

У меня есть проект .NET Standard 2.0 в моем решении, и я использую интерфейс IConfiguration. Когда я пишу имя VS, предлагаю ссылаться на файл Microsoft.Extensions.Configuration.Abstractions.dll. Если я это сделаю, это будет добавлено под ссылкой node. Однако я могу добавить его как пакет NuGet. Оба способа, похоже, работают. Я предполагаю, что ссылка VS предлагается добавить через стандартный SDK.NET, который упоминается в проекте.

Какой рекомендуемый способ добавить эту ссылку? Каковы преимущества и недостатки каждого подхода?

Ответ 1

Ссылка на DLL непосредственно из пакета NuGet, который был загружен вручную или установлен в известном месте, может ускорить процесс восстановления и сборки, но имеет несколько опасностей.

Существует ряд вещей, которые пакет NuGet может сделать, когда ссылаются на то, что файл DLL не может. Если вы хотите сослаться на DLL из пакета, убедитесь, что пакет не выполняет одно из следующих действий /account для следующих возможностей:

  • Дополнительные пакеты NuGet могут быть включены как зависимости. Если вы обновляете DLL из более нового пакета, вам нужно проверить, изменились ли зависимости, и соответственно обновить проект.
  • Пакеты NuGet могут предоставлять различные ссылочные сборки и сборки реализации - например, пакет NuGet может давать dll "поверхность API" в своей папке ref/ а затем содержать различные сборки реализации для .NET Framework.NET Core, Xamarin и другие файлы в своей lib/. папка. Вы должны быть осторожны, чтобы выбрать правильный файл DLL для ссылки на тип проекта - в стандартной библиотеке .NET может потребоваться ссылка на сборку ref/netstandard1.4/foo.dll (например, ref/netstandard1.4/foo.dll во время компиляции и .NET Framework Приложение, которое использует эту библиотеку, должно ссылаться на сборку, например, из lib/net452/foo.dll.
  • Пакеты NuGet могут содержать дополнительную специфику среды выполнения и/или целевой контент, который добавляется в выходные данные сборки. Это могут быть собственные библиотеки (.dll в Windows, .so в Linux и т.д. - из runtime/ подпапки) или любой файл содержимого. Сделать это правильно без NuGet сложно, поскольку файл .nuspec также может определять действия по сборке для файлов содержимого.
  • Логика сборки может быть включена в пакеты NuGet, которые устанавливают определенные свойства или выполняют цели во время сборки, что необходимо для правильного использования продукта. Это невозможно сделать вручную без .csproj редактирования файла .csproj.

Если пакет NuGet не использует ничего из вышеперечисленного (которое необходимо проверить вручную), вы, как правило, можете ссылаться на DLL. Тем не менее, обновление DLL и ее зависимостей - это большая работа, которую проще сделать с NuGet.

Кроме того, вы упомянули, что ссылаетесь непосредственно на резервную папку nuget из инструментария .NET Core. Эта папка не обязательно содержит определенные версии DLL в других установках (в зависимости от установленных версий SDK) и может даже быть установлена в другом месте на разных компьютерах, что делает файл проекта непригодным для других людей, работающих над ним (также как сборка на неоконных машинах).