Недавно я обнаружил, что при использовании msbuild с флагом /p:RestorePackagesPath теги внутри каждого файла csproj имеют приоритет. см. здесь.
В основном, при выполнении следующей команды msbuild:
Код: Выделить всё
MSBuild.exe "C:\ProgramData\SampleProject\SampleProject.sln" /p:RestorePackagesPath="C:\NuGetPackages"
msbuild НЕ будет искать мои пакеты NuGet внутри указанной папки C:\NuGetPackages для с . Итак, если в моем файле csproj есть следующая запись:
Код: Выделить всё
..\packages\EntityFramework.6.3.0\lib\net45\EntityFramework.dll
будет искать запись NuGet EntityFramework.6.3.0 в папке ..\packages\, а не в моей папке C:\NuGetPackages, которую я указываю в командной строке.
Я подумал, что придумаю способ указать условное игнорирование записей и иметь возможность делать это в командной строке. Для этого я выполняю следующую команду:
Код: Выделить всё
MSBuild.exe "C:\ProgramData\SampleProject\SampleProject.sln" /p:RestorePackagesPath="C:\NuGetPackages" /p:RemoveHintPathsFlag=true
и чтобы это работало, я включаю в свой файл csproj следующее:
Выше в первой части я сообщаю файлу csproj, что значение по умолчанию для RemoveHintPathsFlag равно false, затем я включаю условный , который должен запускаться ДО ResolveTargets (я также пробовал запускать ПОСЛЕ ResolveTargets, но это тоже не сработало) и основан на значении, которое я указываю в своем msbuild, в частности /p:RemoveHintPathsFlag = true. Однако это не работает, все значения по-прежнему применяются. Кто-нибудь может понять, почему?
Подробнее здесь:
https://stackoverflow.com/questions/791 ... sproj-file