Abbiamo anche riscontrato questo problema. Volevamo utilizzare percorsi assoluti perché ogni distribuzione creava la cartella Pacchetti in posizioni diverse (e abbiamo anche più macchine di compilazione). L'idea era di avere i pacchetti NuGet in un unico posto, liberando così la memoria sprecata dall'avere più copie della stessa cosa.
Il nostro problema specifico era che potevamo impostare il percorso assoluto nel file NuGet.Config, i pacchetti Nuget avrebbero ripristinare in quella posizione durante una distribuzione, ma poi non tutti riuscivano a trovare durante la fase di MSBuild nel stessa distribuzione.
Ho scritto uno script PowerShell per risolvere questo problema. Sostituisce sostanzialmente i riferimenti relativi a HintPath con il percorso assoluto che voglio usare.
#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
}
Abbiamo installato questo script da eseguire come un passo PowerShell costruire prima dei passaggi MSBuild nel nostro schieramento. Il risultato è che i file csproj vengono modificati per la directory di lavoro sui computer di compilazione ma non nel controllo del codice sorgente di Visual Studio. (Se si desidera che vengano modificati nel controllo origine, è possibile eseguirlo in PowerShell e archiviare le modifiche.)
Qual è lo scopo per cui si desidera un percorso non relativo? Potrei capire di volere un percorso che includa una SpecialFolder, ma un percorso interamente codificato non è flessibile tra i sistemi. – STW
@Yoooder Non si sono visti i percorsi esilaranti relativi che lo studio visivo ama utilizzare, ma potrebbe anche essere codificato. Li ho visti .. \ .. \ se stessi fino alla radice e poi di nuovo alla cartella di destinazione, è grandioso. – hova
stavo cercando questo. Perché? Ho alcuni metodi di estensione che si ripristinano dopo aver rotto le modifiche nelle varie versioni dell'app nel corso degli anni. Grazie a AutoDesk. Aspetta, no. Questi metodi di estensione sono universali in tutte le mie app. Non voglio dover applicare patch a tutte le app sul mio computer perché devo modificare o aggiungere una correzione per le incoerenze di AutoCAD. Voglio sistemarlo in un posto. L'unico altro modo corretto per farlo è con un server Nuget locale. Overkill molto? –