Nano Hash - криптовалюты, майнинг, программирование

Разрешение зависимостей Nuget

Используя MsTest.TestAdapter версии 1.4.0 в качестве примера, я пытаюсь понять, как NuGet разрешает зависимости для этого пакета во время установки.

Меня интересуют не детали того, какая версия каждого пакета будет разрешена, а где находится эта информация.

Если я выполню следующую команду в произвольной папке:

nuget install -source https://api.nuget.org/v3/index.json MSTest.TestAdapter -version 1.4.0

Вы увидите, что в конце установки будет установлено 50 пакетов.

Предполагая, что это зависимости, разрешенные NuGet, откуда он берет это дерево зависимостей? Я просмотрел информацию о пакете (nuspec, props, target) и не нашел никакой подсказки.

Любые идеи?


  • В самом пакете явно указаны прямые зависимости fuget.org/packages/MSTest.TestAdapter Так что NuGet может легко разрешить все зависимости. 12.02.2019
  • Если под явными заявлениями вы подразумеваете тег зависимостей в спецификации nuget, то я должен сказать, что ориентируюсь на .NET 4.5, а не на .NETCoreApp1.0. Как это будет работать? 13.02.2019
  • Как это должно работать? В .NET Framework уже есть все необходимые классы, поэтому ему не нужны другие зависимости. 13.02.2019

Ответы:


1

Если под «явными состояниями» вы подразумеваете тег зависимостей в спецификации nuget, то я должен сказать, что ориентируюсь на .NET 4.5, а не на .NETCoreApp1.0. Как это будет работать?

Как сказал Лекс, «в самом пакете явно указаны прямые зависимости», согласно MSTest. TestAdapter, мы могли бы узнать, что дерево зависимостей этого пакета выглядит так:

<dependencies>
  <group targetFramework=".NETCoreApp1.0">
    <dependency id="NETStandard.Library" version="1.6.1" />
    <dependency id="System.Diagnostics.TextWriterTraceListener" version="4.3.0" />
  </group>
</dependencies>

Но если вы выполните команду установки без параметра -Framework, nuget восстановит все зависимости этого пакета. По этой причине будет установлено 50 пакетов.

Если вы ориентируетесь на .NET 4.5, вам следует использовать параметр -Framework для указания Framework, например:

nuget install -source https://api.nuget.org/v3/index.json MSTest.TestAdapter -version 1.4.0 -Framework 4.5

В этом случае nuget получает только зависимости для .NET 4.5. См. документ команда установки (NuGet CLI) для некоторые подробности.

Примечание:

Команда установки не изменяет файл проекта или packages.config; таким образом, это похоже на восстановление в том смысле, что оно только добавляет пакеты на диск, но не изменяет зависимости проекта.

Чтобы добавить зависимость, либо добавьте пакет через пользовательский интерфейс диспетчера пакетов или консоль в Visual Studio, либо измените packages.config, а затем запустите установку или восстановление.

Надеюсь это поможет.

13.02.2019
  • Если я правильно понимаю, это означает, что все 50 зависимостей исходят из NETStandard.Library, System.Diagnostics.TextWriterTraceListener и его цепочки зависимостей, верно? Когда мы ссылаемся на MSTest.TestAdapter в проекте Visual Studio, мы не видим все эти пакеты в папке пакетов решений, но видим этот набор файлов в каталоге bin. Где хранятся эти пакеты в локальном devenv? Кто делает копию в папку bin, так как они не указаны в .csproj? 13.02.2019
  • @IgorKondrasovas, --If I understand properly, it means then all 50 dependencies come from NETStandard.Library, System.Diagnostics.TextWriterTraceListener and its dependency chain, right? Да, вы правы. 13.02.2019
  • @IgorKondrasovas, Where these packages are stored in the local devenv? Who makes the copy to the bin folder, since they are not referenced in the .csproj? Если вы переименуете этот пакет в .zip и распакуете его, вы найдете файл mstest.testadapter.props в папке net45. Откройте этот файл .props, вы получите содержимое ...<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>..., этот параметр скопирует файл dll в папку bin. 13.02.2019
  • Большой! Теперь мне просто нужно выяснить, где хранятся все эти пакеты при использовании Visual Studio. Мой проект использует packages.config, и эти зависимости не находятся внутри папки пакетов. Может быть, какая-то папка уровня пользователя/машины... 14.02.2019
  • @IgorKondrasovas, My project uses packages.config and these dependencies are not inside "packages" folder Проверьте, есть ли в вашем решении какой-либо nuget.config с настройкой ` ‹add key=repositoryPath value=OtherFolder /›`, если да, то эти зависимости не находятся внутри папки пакетов. 14.02.2019
  • В моем решении нет nuget.config. Единственный Nuget.Config, который я вижу, находится в %appdata%\NuGet\NuGet.Config и не содержит никаких параметров репозиторияPath. Я нашел рассматриваемые пакеты в папке глобальных пакетов (%userprofile%\.nuget\packages), где также должны были находиться пакеты (docs.microsoft.com/en-us/nuget/consume-packages/). Мое любопытство заключается в том, что в соответствии с этой страницей в случае packages.config пакеты должны быть скопированы в папку с пакетами моих решений. Но это не так. 14.02.2019
  • Я знаю, что это детали, но я думаю, что важно демистифицировать. 14.02.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..