Wystąpił również ten problem. Chcieliśmy użyć bezwzględnych ścieżek, ponieważ każde wdrożenie utworzyło folder Packages w różnych lokalizacjach (a także mamy wiele maszyn do kompilacji). Chodziło o to, aby pakiety NuGet znajdowały się w jednym miejscu, co uwolniłoby zmarnowaną pamięć od posiadania wielu kopii tego samego.
Naszym szczególnym problemem było to, że mogliśmy ustawić absolutną ścieżkę w pliku NuGet.Config, pakiety NuGet przywróciłyby tę lokalizację podczas wdrożenia, ale wtedy nie mogły znaleźć wszystkich podczas kroku MSBuild w to samo wdrożenie.
Napisałem skrypt PowerShell, aby rozwiązać ten problem. Zasadniczo zamienia względne odwołania HintPath na bezwzględną ścieżkę, którą chcę użyć.
#Get list of all csproj files in a solution
$dir = Get-ChildItem $pwd -Recurse
$list = $dir | Where {$_.extension -eq ".csproj"}
#Replace relative paths with absolute path
$absolutePath = 'C:\absolute\path\Packages'
function replaceRelativePath($line){
if($line -match '<HintPath>[^C].+\\Packages')
{
$relative = $matches[0] -replace '\\','\\'
return ($line -replace "$relative", "<HintPath>$absolutePath")
}
else
{
return $line
}
}
#Updating files
Foreach($file in $List)
{
(Get-Content $file.FullName)| ForEach-Object{replaceRelativePath($_)} | Set-Content $file.FullName
}
Postawiliśmy ten skrypt do uruchomienia jako etapu budowy PowerShell przed etapami MSBuild w naszej instalacji. Powoduje to, że pliki csproj są zmieniane w katalogu roboczym na maszynach budujących, ale nie w sterowaniu źródłami Visual Studio. (Jeśli chcesz, aby zmieniły się w kontroli kodu źródłowego, prawdopodobnie uruchomisz to w PowerShell i sprawdzisz zmiany.)
Jaki jest cel szukania niedokładnej ścieżki? Rozumiem, że potrzebuję ścieżki zawierającej specjalny folder, ale całkowicie zakodowana ścieżka jest nieelastyczna w różnych systemach. – STW
@Yoooder Nie widziałeś wesołych względnych ścieżek, które studio graficzne lubi używać, ale równie dobrze może być zakodowane. Widziałem ich .. \ .. \ samych aż do katalogu głównego, a następnie z powrotem do folderu docelowego, to jest świetne. – hova
Szukałem tego. Czemu? Mam kilka metod rozszerzenia, które można odzyskać po przełamaniu zmian w różnych wersjach aplikacji na przestrzeni lat. Dziękuję AutoDesk. Czekaj nie. Te metody rozszerzenia są uniwersalne we wszystkich moich aplikacjach. Nie chcę poprawiać każdej aplikacji na moim komputerze, ponieważ muszę zmienić lub dodać poprawkę do niespójności programu AutoCAD. Chcę to naprawić w jednym miejscu. Jedynym rozsądnym sposobem na to jest z lokalnym serwerem Nuget. Overkill dużo? –