2

(Использование nuget.exe версии 4.9.2 и Visual Studio 2017 Community Edition)

Я озадачен проблемой восстановления nuget.exe. Я использую Дженкинс, чтобы создавать исходные тексты. У меня было решение с одним проектом, Roadmap, и оно было построено нормально, включая использование

nuget.exe restore "test.sln"

восстановить пакеты nuget. Мои сборки Jenkins всегда начинаются с пустой директории.

Теперь у меня есть второй проект. Он использует несколько одинаковых пакетов nuget. Но когда Jenkins запускает ту же команду nuget.exe для файла .sln, я получаю эту ошибку:

C:\Jenkins\workspace\test>nuget restore "test.sln"
MSBuild auto-detection: using msbuild version '12.0' from 'C:\Program Files (x86
)\MSBuild\12.0\bin\amd64'.
All packages listed in packages.config are already installed.
Invalid restore input. Missing required property 'OutputPath' for project type '
PackageReference'. Input files: C:\Jenkins\workspace\test\Roadtrip\Roadtrip.csproj.

Я вижу OutputPath, установленный в обоих файлах .csproj в моем решении. Но сообщение об ошибке не совсем вводит в заблуждение. Roadmap.csproj, оригинал, имеет такие строки для пакетов nuget:

  <ItemGroup>
     <Reference Include="CommonServiceLocator, Version=2.0.4.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
       <HintPath>..\packages\CommonServiceLocator.2.0.4\lib\net45\CommonServiceLocator.dll</HintPath>
     </Reference>
  ...

В Roadtrip.csproj, новый, эквивалентный раздел содержит

  <ItemGroup>
     <PackageReference Include="CommonServiceLocator">
        <Version>2.0.4</Version>
     </PackageReference>
  ...

Это тот случай, когда я использую диспетчер nuget решения, чтобы добавить пакеты в один или оба проекта, или использую диспетчер nuget каждого проекта, чтобы добавить их пакеты.

Из того, что я видел в Интернете, Roadtrip выглядит хорошо. Я не уверен, почему это будет отличаться от дорожной карты. В Visual Studio ссылки найдены и оба приложения запущены, а правильные библиотеки DLL находятся в каталогах отладки и выпуска. Кроме того, когда я запускаю на своем ноутбуке строку nuget.exe, пакеты извлекаются.

Только когда я запускаю его на удаленном сервере Jenkins, он выходит из строя. Я пытался найти различия в конфигурациях, но они не выпрыгивают, что я могу найти, что соответствует обоим. Я надеюсь, что здесь есть кто-то знающий, который знает особенности того, почему я вижу это сообщение об ошибке.

Я ценю любую помощь.

Обновление: я собирался добавить это утром, и Скотт упомянул об этом, а также ... Я выбираю Дженкинса, но это действительно машина, на которой работает Дженкинс. Я могу открыть окно cmd на своем ноутбуке (не окно cmd MSVC), стереть каталог пакетов решений и все подкаталоги obj/bin, и nuget.exe restore test.sln завершится успешно. Делать то же самое на машине с Дженкинсом не удается, как показано выше ... и работал до того, как я добавил второй проект. Версии nuget и Visual Studio одинаковы для обоих, переменные среды в окнах cmd одинаковы для обоих.

2 ответа2

0

У меня была такая же проблема при восстановлении локально, и она работала, как и ожидалось. Но когда я попробовал и начал свою работу с агентом Дженкинса, у меня возникла та же проблема с восстановлением nuget .

nuget restore pathToProject\MyProject.csproj

Invalid restore input. Missing required property 'OutputPath' for project type 'PackageReference'. Input files: MyProject.csproj

Где на моей машине с агентом Jenkins у меня была та же версия Nuget, что и версия Nuget на моей машине. И тот же MSBuild, что и мой MSBuild на моей машине.

Но команда восстановления nuget запустила другую версию MSBuild на моем агенте. Указание MSBuildPath для версии MSBuild 15 помогло в моем случае.

nuget restore pathToProject\MyProject.csproj -MSBuildPath "pathToMSBuild\MSBuild\15.0\Bin"

Или вы можете попробовать использовать -MSBuildVersion.

Насколько я понимаю, изменение PackageReference лучше всего работает с MSBuild версии 15. Так как вышла Visual Studio 2017, а заодно и MSBuild 15.

Если вы все еще хотите использовать ProjectReference и не возвращаться к пакетам.Config. Использование MSBuild 15 должно помочь, и в моем случае это помогло. Но переход с package.config и использование того же MSBuild также должны работать без каких-либо проблем.

0

Мой рабочий ответ таков: используемые мной версии Visual Studio / nuget.exe не поддерживают PackageReference в файлах .csproj. Я читал, что это должно, но не смог обойти эту проблему. После того, как я изменил свой проект Roadmap для использования packages.config и изменил мой файл .csproj, чтобы он соответствовал файлу Roadmap, команда восстановления nuget работала, как и ожидалось.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .