Получение правильной версии зависимости при использовании. NET Стандартная библиотека в. NET Framework - PullRequest
0 голосов
/ 23 января 2020

Рассмотрим следующий сценарий:

  1. В вашем решении есть проект "X", ориентированный на netstandard20.
  2. Project X зависит от внешнего пакета nuget "ENP", который имеет разные версии для netstandard и netframework. Когда вы добавляете ENP в проект X, вы получаете нестандартную версию.
  3. У вас есть проект "Y" в вашем решении с ориентацией. NET Framework 4.7. Этот проект ссылается на проект X, и поэтому также должен ссылаться на ENP. Но если вы добавите ENP в качестве пакета nuget в этот проект, вы получите версию NET Framework вместо стандартной версии NET, и ваше приложение создаст sh.

Насколько я знаю, нет способа заставить nuget получить правильную версию. Является ли единственным решением для добавления правильной ссылки вручную?

Теперь второй сценарий: вы хотите распространить проект X через пакет nuget. Когда люди устанавливают его, они также автоматически устанавливают ENP зависимостей. Как вы убедитесь, что Nuget получает правильную версию? Вы не можете попросить других людей вручную добавить правильную зависимость ...

Является ли здесь правильным решением иметь несколько целей сборки для проекта X?

1 Ответ

0 голосов
/ 27 января 2020

Этот проект ссылается на проект X, и поэтому также должен ссылаться на ENP.

Если ваш проект не имеет непосредственной зависимости от ENP, ваш проект на самом деле не должен ссылаться ЕПС. Например, как прокомментировали MickyD и Zivkan выше, nuget работает так, как задумано в вашем сценарии.

Для поведения, с которым вы встретились Y does not have an immediate dependency, but "letting X do it" does nothing. The files aren't copied over on compile, я думаю, что это возможно текущий проект не использует формат PackageReference.

Существует два формата для управления пакетами nuget, Package.config и PackageReference. Все проекты .net standard and .net core используют формат PackageReference, в то время как проекты, предназначенные для .net framework, могут использовать формат packages.config или PackageReference . Если ваш. net каркасный проект выбирает packages.config для управления пакетами nuget, после сборки мы не можем найти файлы из ENP пакета, так как текущий проект и указанный X проект не используют тот же формат управления. Для этого создайте новый проект, который использует packageReference, или добавьте его в файл проекта вашего текущего проекта (packages-config):

  <PropertyGroup>
    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
  </PropertyGroup>

Убедитесь, что этот проект и упомянутый проект X используют одинаковый формат PackageReference, тогда вы обнаружите, что «позволить X сделать это» делает то, что вам нужно.

Я думаю, что приведенный выше сценарий решит вашу первую проблему, и тогда нам не нужно продолжать ваш второй сценарий, основанный на первый выпуск. Надеюсь, это поможет:)

...