Желтые треугольники на предметах Nuget? Не удалось разрешить эту ссылку. Не удалось найти сборку "NHibernate" - PullRequest
0 голосов
/ 04 марта 2020

(Visual Studio 2019,. Net Framework, C# Projects)

Я извлекаю старое C# (. Net Framework 4) решение (которое было разработано кем-то, кого я не не знаю) с большим количеством проектов из хранилища. Однако существует много ошибок, вызванных неправильной загрузкой пакетов Nuget (в этих пакетах есть маленькие желтые треугольники).

Следующий код xml скопирован из файлов .csproj. Все эти Reference с HintPath имеют ошибку. Кажется, оригинальные разработчики сохраняют файлы DLL в отдельной папке ..\..\Lib\.

Однако папка не существует . Как решить проблему?

  <ItemGroup>
    <Reference Include="Castle.Core">
      <HintPath>..\..\Lib\NHibernate\Fluent\Castle.Core.dll</HintPath>
    </Reference>
    <Reference Include="Castle.DynamicProxy2">
      <HintPath>..\..\Lib\NHibernate\Fluent\Castle.DynamicProxy2.dll</HintPath>
    </Reference>
    <Reference Include="FluentNHibernate">
      <HintPath>..\..\Lib\NHibernate\Fluent\FluentNHibernate.dll</HintPath>
    </Reference>
    <Reference Include="log4net">
      <HintPath>..\..\Lib\Log4net\log4net.dll</HintPath>
    </Reference>
    <Reference Include="NHibernate">
      <HintPath>..\..\Lib\NHibernate\Fluent\NHibernate.dll</HintPath>
    </Reference>
    <Reference Include="NHibernate.ByteCode.Castle">
      <HintPath>..\..\Lib\NHibernate\Fluent\NHibernate.ByteCode.Castle.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
  </ItemGroup>

В окне вывода отображается следующее сообщение:

1> c: \ program files (x86) \ microsoft visual studio \ 2019 \ enterprise \ MSBuild \ Current \ Bin \ Microsoft.Common.CurrentVersion.targets (2106,5): предупреждение MSB3245: не удалось разрешить эту ссылку. Не удалось найти сборку "NHibernate". Убедитесь, что сборка существует на диске. Если эта ссылка требуется для вашего кода, вы можете получить ошибки компиляции.

1> c: \ program files (x86) \ microsoft visual studio \ 2019 \ enterprise \ MSBuild \ Current \ Bin \ Microsoft. Common.CurrentVersion.targets (2106,5): предупреждение MSB3245: не удалось разрешить эту ссылку. Не удалось найти сборку "NHibernate.ByteCode.Castle". Убедитесь, что сборка существует на диске. Если эта ссылка требуется вашим кодом, вы можете получить ошибки компиляции.

Ответы [ 3 ]

1 голос
/ 05 марта 2020

Я совершенно уверен, что решение не использует NuGet. Первоначальный разработчик почти наверняка проверял двоичные файлы в управлении исходным кодом, в этом каталоге lib.

NuGet добавляет <HintPath> элементы в проект, когда проект использует packages.config, что было единственной доступной опцией, доступной ранее. Visual Studio 2017. Однако каталог по умолчанию - $(relative path to solution directory)\packages, а не $(..)\lib, хотя это можно изменить с помощью файла nuget.config.

Но NuGet имеет указанную структуру папок c в пределах Папка packages, которая всегда будет $(PackageId).$(PackageVersion). Поскольку подпапки в lib просто говорят NHibernate и log4net без версии пакета, для этого изначально невозможно получить NuGet. edit: кроме того, сборки в пакете всегда находятся в папке lib\, поэтому, если сборка пришла из NuGet, путь подсказки должен быть ..\packages\log4net.1.2.3\lib\<tfm>\log4net.dll. Технически, часть <tfm> является необязательной для пакетов, которые хотят поддерживать только packages.config, но подавляющее большинство пакетов ее используют. Я был бы шокирован, если бы такой популярный пакет, как log 4net или nhibernate, не использовал папки <tfm>. Таким образом, в принципе нет никаких шансов, что это когда-либо было установлено через NuGet.

Если вы хотите sh начать использовать NuGet, вы можете удалить ссылки на эти сборки (либо в VS, либо вручную отредактируйте csproj) , а затем используйте интерфейс диспетчера пакетов NuGet для установки пакетов. Он добавит соответствующие ссылки обратно, на этот раз с указанием пути к существующей папке NuGet.

0 голосов
/ 05 марта 2020

Однако папка не существует. Как решить проблему?

Я думаю, вы переносите свой проект в новую среду. В предыдущей среде вы изменили repositoryPath файла nuget.config (восстановить механизм для nuget в текущей среде VS) в папку с именем Lib . Вы можете сослаться на этот официальный документ .

То есть отображается как

<HintPath>..\..\Lib\NHibernate\Fluent\NHibernate.ByteCode.Castle.dll</HintPath>

Однако в вашем новом В среде нет никаких изменений в вашей текущей информации о конфигурации против Nuget с использованием адреса по умолчанию, например,

<HintPath>..\..\packages\NHibernate\Fluent\NHibernate.ByteCode.Castle.dll</HintPath>

И конфликт между текущим механизмом Nuget по умолчанию и предыдущим механизмом Nuget .

Предложение

В качестве предложения , пожалуйста, попробуйте мои действия для устранения проблемы:

1) закрыть VS Instance, удалите Nuget.Config в C:\Users\user\AppData\Roaming\NuGet

2) , повторно откройте ваш проект -> щелкните правой кнопкой мыши на Solution и выберите Restore Nuget Packages

enter image description here

3) Tools -> Nuget Package Manager -> Package Manage Console, а затем введите

update-Package -reinstall

Кроме того , если они не работают, вы должны вручную удалить эти пакеты.

Перед этим сначала удалите Nuget.Config.

1) сделать список для записи имен этих пакетов nuget, а затем удалите тег <Reference> этих пакетов nuget в файле xxxx.csproj, packages.config.

2) очистите кэш nuget и затем установите эти пакеты на Manage NuGet Packages (щелкните правой кнопкой мыши проект -> Manage NuGet Packages).

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

0 голосов
/ 04 марта 2020

Это нормально, чтобы сохранить библиотеки в отдельной папке, например, из репозитория. Кажется, ваше приложение не может получить эту DLL. Сначала проверьте, существуют ли dll-ы в этих папках. Второе - попытаться восстановить / повторно скачать библиотеки из nuget. Если это не сработает, предоставьте больше информации о предупреждениях

...