Ошибка NU5012 - пакет nuget не может найти путь (/bin/release/MyProject/bin/release)
Я пытаюсь обновить пакет nuget, выполнив команду nuget pack -properties Configuration=Release
но это дает мне следующую ошибку:
Невозможно найти "bin/Release/{имя-проекта}/bin/Release". Мэй уверен, что проект был построен
Я не совсем уверен, почему он переходит в мою папку Release, а затем продолжает переходить в другую папку Release, поскольку ее не существует? Я совершенно заблудился здесь, и я не уверен, что делать.
2 ответа
TL;DR
Для нового <Project Sdk="Microsoft.NET.Sdk">
Формат файла.csproj, используйте dotnet pack
создавать пакеты NuGet, даже если они нацелены на.Net Framework или многоцелевые. Запустите это из каталога, содержащего ваши .csproj
(и, возможно, .nuspec
)
dotnet pack MyProject.csproj -c Release
Это также объединит любые .nuspec
файл совпадает с именем проекта, учитывая $
Подстановка символов из версии и метаданных, установленных в вашем .csproj
,
Более детально
Я также столкнулся с этой проблемой - в предыдущих версиях я обычно использовал этот подход для .csproj
с .nuspec
файл с тем же именем, чтобы я мог использовать все токены $, как $id$
, $version$
,
Однако при попытке этого против более нового <Project Sdk="Microsoft.NET.Sdk">
форматы csproj:
nuget pack {MyProject}.csproj -Prop Configuration=Release
Я получил ту же ошибку (обратите внимание на "дублирование" bin\release
):
Ошибка NU5012: невозможно найти "bin\Release{MyProject}\bin\Release\". Убедитесь, что проект был построен.
И если бы я попытался упаковать против .nuspec
содержащие символы (NuGet версия: 4.7.1.5393)
nuget pack {MyProject}.nuspec -Prop Configuration=Release
Я просто получаю бесполезное сообщение, потому что nuget не может автоматически разрешить токены $.
Значение не может быть нулевым или пустой строкой. Имя параметра: значение
Однако, используя пакет dotnet вместо Nuget
dotnet pack MyProject.csproj -c Release
Я добираюсь до того места, где я хочу быть, т.е. многоцелевого пакета NuGet с символами $ в .nuspec
правильно синхронизированы с .csproj
(Вы можете проверить это, открыв .nupkg
файл, например, 7zip и изучения финала .nuspec
файл в корне пакета)
У меня была та же проблема с многоцелевым проектом (нацеленным на net452 и netstandard2.0).
Мое исправление / хак состоял в том, чтобы добавить 'TargetFramework=net452' в список свойств, передаваемых Nuget, и вручную добавить вывод netstandard2.0 в раздел files в файле.nuspec-file.
Надеюсь, кто-то найдет лучшее решение
Часть ответа Руны (настройка TargetFramework=net471
NuGet свойство)
и используя NuGet версии 4.9.1 (инструкция здесь: /questions/11478517/nevozmozhno-upakovat-paket-nuget-v-vsts-nevozmozhno-privesti-obekt-tipa-systemstring-k-tipu-nugetframeworksnugetframework/11478529#11478529)
был способ пойти для меня.
На самом деле я просто решил проблему со своей стороны. Nuget может не найти скрытую dll. Вот мое решение:
Постройте проект;
Показать все файлы в Visual Studio, чтобы вы могли видеть скрытые файлы, чтобы вы могли видеть dll в папке bin;
Щелкните правой кнопкой мыши, откройте папку в проводнике файлов, затем скопируйте ее в текущую папку, чтобы они заменили / или отобразили файлы;
Сделайте "Nuget Pack" снова.