Восстановление NuGet из пакетного скрипта - PullRequest
0 голосов
/ 05 февраля 2020

Я написал быстрый пакетный скрипт для построения нескольких решений по порядку, однако в настоящее время он не восстанавливает пакеты NuGet, поэтому, если я просто загрузил код на другой компьютер, он не будет работать без открытия и восстановления. Я пытаюсь обновить скрипт для запуска восстановления, но что-то не работает. Я просто использую строку call nuget restore path\to\solution.sln, но получаю ошибки. Вот вывод:

C:\Users\sfaust\Source\Repos\BIT>call nuget restore ModelChecker\ModelChecker.sln
MSBuild auto-detection: using msbuild version '16.4.0.56107' from 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\bin'.
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\bin\Microsoft.Common.CurrentVersion.targets(359,25): error MSB4184: The expression "[MSBuild]::NormalizePath(C:\Users\sfaust\Source\Repos\BIT\ModelChecker\MCCore, obj\"Any CPU"\Debug\, MCCore.csproj.CopyComplete)" cannot be evaluated. Illegal characters in path. [C:\Users\sfaust\Source\Repos\BIT\ModelChecker\MCCore\MCCore.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\bin\Microsoft.Common.CurrentVersion.targets(359,25): error MSB4184: The expression "[MSBuild]::NormalizePath(C:\Users\sfaust\Source\Repos\BIT\ModelChecker\MCConfigurator, obj\"Any CPU"\Debug\, MCConfigurator.csproj.CopyComplete)" cannot be evaluated. Illegal characters in path. [C:\Users\sfaust\Source\Repos\BIT\ModelChecker\MCConfigurator\MCConfigurator.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\bin\Microsoft.Common.CurrentVersion.targets(359,25): error MSB4184: The expression "[MSBuild]::NormalizePath(C:\Users\sfaust\Source\Repos\BIT\ModelChecker\RMCApp, obj\"Any CPU"\Debug\, RMCApp.csproj.CopyComplete)" cannot be evaluated. Illegal characters in path. [C:\Users\sfaust\Source\Repos\BIT\ModelChecker\RMCApp\RMCApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\bin\Microsoft.Common.CurrentVersion.targets(359,25): error MSB4184: The expression "[MSBuild]::NormalizePath(C:\Users\sfaust\Source\Repos\BIT\ModelChecker\MCCore_Tests, obj\"Any CPU"\Debug\, MCCore_Tests.csproj.CopyComplete)" cannot be evaluated. Illegal characters in path. [C:\Users\sfaust\Source\Repos\BIT\ModelChecker\MCCore_Tests\MCCore_Tests.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\bin\Microsoft.Common.CurrentVersion.targets(359,25): error MSB4184: The expression "[MSBuild]::NormalizePath(C:\Users\sfaust\Source\Repos\BIT\ModelChecker\TestProject, obj\"Any CPU"\Debug\, TestProject.csproj.CopyComplete)" cannot be evaluated. Illegal characters in path. [C:\Users\sfaust\Source\Repos\BIT\ModelChecker\TestProject\TestProject.csproj]

WARNING: Error reading msbuild project information, ensure that your input solution or project file is valid. NETCore and UAP projects will be skipped, only packages.config files will be restored.
All packages listed in packages.config are already installed.

Судя по последней строке, вроде бы все работает, но другие ошибки вроде бы не сработали ... Что я здесь не так делаю?

1 Ответ

1 голос
/ 05 февраля 2020

Хорошо, после попытки свести его к минимальному воспроизводимому примеру, я обнаружил проблему, хотя я все еще не уверен, что полностью понимаю, почему он так себя ведет. Я прокомментировал все, что не было напрямую связано с NuGet, которое на самом деле было просто объявлением переменных ... и оно начало работать. После этого я помещал их обратно по одному и сужал до строки:

set platform="Any CPU"

Это просто место для объявления платформы для сборок, выполняемых после объявления, поэтому я не думал, что это будет иметь какой-либо эффект, так как переменная нигде не использовалась, но, очевидно, так и было, поскольку закомментировав ее, исправил ее, а возвращая ее снова сломал.

В итоге я изменил имя переменной на buildPlatform вместо * * * * * * * * * * platform * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *> * * * * * * * * * * * * * * * * *> *> *> Все, что я могу думать, это то, что он использует переменные пакетного сценария внутри файлов .csproj и выполняет какую-то замену, чтобы получить этот странный путь. Заглянув в файл .csproj, я не вижу, как это могло бы произойти. Есть пара вариантов использования $(Platform), но они являются условиями для свойств сборки, они не имеют ничего общего с путями, и замена их будет работать просто отлично ... Так что я не уверен, почему, но это, кажется, решение.

Если кто-нибудь может опубликовать более полный ответ с объяснением причин, по которому я это сделаю, я с удовольствием приму ваш ответ поверх моего.

...