También nos encontramos con este problema. Queríamos utilizar rutas absolutas porque cada implementación creó la carpeta Paquetes en diferentes ubicaciones (y también tenemos varias máquinas de construcción). La idea era tener los paquetes NuGet en un solo lugar, lo que liberaría la memoria desperdiciada de tener múltiples copias de la misma cosa.
Nuestro problema específico era que podíamos establecer la ruta absoluta en el archivo NuGet.Config, los paquetes NuGet restaurarían esa ubicación durante una implementación, pero luego no pudo encontrarlos durante el paso de MSBuild en el mismo despliegue.
Escribí un script de PowerShell para solucionar este problema. Básicamente reemplaza las referencias relativas de HintPath con la ruta absoluta que quiero usar.
#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
}
Configuramos este script para que se ejecute como un paso de compilación de PowerShell antes de que MSBuild realice los pasos en nuestro despliegue. El resultado es que los archivos csproj se cambian para el directorio de trabajo en las máquinas de compilación, pero no en el control de código fuente de Visual Studio. (Si desea que cambien en el control de código fuente, probablemente pueda ejecutar esto en PowerShell y verifique los cambios).
¿Cuál es el propósito de querer una ruta no relativa? Podría entender que quiero un camino que incluya una Carpeta Especial, pero un camino completamente codificado es inflexible en todos los sistemas. – STW
@Yoooder No has visto las divertidas trayectorias relativas que a Visual Studio le gusta usar, también puede ser difícil. Los he visto ... a la raíz y luego a la carpeta de destino, es genial. – hova
Estaba buscando esto. ¿Por qué? Tengo algunos métodos de extensión que se recuperan de los cambios en las diferentes versiones de la aplicación a lo largo de los años. Gracias AutoDesk. Espera no. Estos métodos de extensión son universales en todas mis aplicaciones. No quiero tener que parchar todas las aplicaciones en mi máquina porque necesito cambiar o agregar una solución para las incoherencias de AutoCAD. Quiero arreglarlo en un solo lugar. La única otra forma sensata de hacer esto es con un servidor Nuget local. ¿Overkill mucho? –