Получить библиотеки DLL зависимостей проекта в папке пакета из package.json

#c# #visual-studio #nuget #nuget-package #solution

#c# #visual-studio #nuget #nuget-пакет #решение

Вопрос:

Я хочу извлечь библиотеки DLL зависимостей NuGet, которые зарегистрированы в project package.config, из папки пакета.

package.config (пример):

 <?xml version="1.0" encoding="utf-8"?>
<packages>
     <package id="Humanizer.Core" version="2.6.2" targetFramework="net472" />
</packages>
  

Структура:

 - Folder
   - ProjectFolder
      - packages.config <-- config file
   - Packages
       - Humanizer.Core.2.6.2
            - lib
                - netstandard1.0
                    - Humanizer.DLL
                - netstandard2.0
                    - Humanizer.DLL
   - Solution
  

Теперь я могу извлечь информацию из package.config , чтобы получить идентификатор версию вместе, чтобы знать, в какой папке мне нужно находиться в Packages папке. Тогда я уверен, что есть lib папка, так что все в порядке. Но потом я застреваю. Причина в том, что lib папка содержит netstandard1.0 и / или netstandard2.0 (или другие) папки, в то время как в package.config остался только targetFramework="247" атрибут, который не соответствует.

Есть идеи, как мне с этим справиться? Может быть, я все делаю неправильно?

Ответ №1:

Получить библиотеки DLL зависимостей проекта в папке пакета из package.json

На самом деле, я в замешательстве, почему вы получаете targetframework="247" . Интересно, изменилось ли это самостоятельно.

Поэтому, пожалуйста, запустите update-package -reinstall в Tools -> NuGet Package Manager-> Консоль менеджера пакетов, чтобы переустановить ваш nuget и зависимости.

targetframework in packages.config файл означает версию фреймворка вашего текущего проекта. Это относится к версии framework вашего текущего проекта. Установите эти пакеты nuget в проект под этой версией фреймворка.

=======================================

Пожалуйста, обратите внимание, что:

Когда пакет nuget устанавливает свои зависимости, он использует правило, ближайшее к победе. Это установит зависимость, которая ближе к версии framework проекта.

Вы можете проверить этот документ о том, как NuGet разрешает зависимости пакетов.

Например, если ваш проект предназначен для netframework4.7.2 и имеет такие зависимости, как netframework 4.7.1 и netframework 4.6.2 , он установит версию зависимости, net framework4.7.1 которая ближе всего к основному проекту net472 .

Как ваше описание, Humanizer.Core имеет зависимость типа net standard 1.0 и netstandard 2.0 ,

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

Также, как сказано в этом документе,

Минимальная версия, поддерживаемая net standard 1.0 is net framework 4.5 , и минимальная версия, поддерживаемая net standard 2.0 is net standard 4.6.1 .

===========================================================

Если net framework 4.5 <= версия вашей основной платформы проекта < net framework 4.6.1 .

Пакет nuget установит зависимость от net standard 1.0 .

Если net framework 4.6.1 <= ваша основная версия project framework, пакет nuget установит зависимость от net standard 2.0 .

Если у вас есть зависимость от более новой версии и она совместима с вашим основным проектом, она установит последнюю версию.

Кроме, вы можете загрузить свой проект и проверить hintpath содержимое xxx.csproj файла, чтобы увидеть, какую версию зависимости использовал проект.

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

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

Если ваш проект нацелен на >= net framework 4.6.1 , он установит net standard 2.0 зависимость.

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

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

========================

Тест

И вы можете просто создать два проекта, которые нацелены на Net Framework4.5.2 и Net Framework 4.7.2 соответственно. А затем установите этот пакет в эти два проекта, чтобы увидеть поведение.

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

1. Большое вам спасибо за ваш ответ! Я рассмотрю это позже в ближайшие дни и свяжусь с вами.

2. Спасибо за ваш отзыв. И я предлагаю вам протестировать это вовремя. ха-ха. в любом случае, это зависит от вас 🙂 Кроме того, если у вас есть какие-либо опасения, пожалуйста, не стесняйтесь, дайте нам знать вовремя. И если это поможет вам справиться с проблемой, пожалуйста, не забудьте принять это 🙂

3. Спасибо за вашу помощь, у меня было время исправить проблему. Я использовал файл xxx.csproj для извлечения путей зависимостей и использования путей. Итак, еще раз, спасибо 🙂

4. Небольшое примечание: targetframework="247" часть, которую я не редактировал вручную, и переустановка не внесла изменений в файлы и т.д.