visual tutorial studio guide funciones espaƱol code autocompletar visual-studio visual-studio-2008

tutorial - Forzar una referencia para que sea absoluta usando Visual Studio



visual studio code guide (6)

De forma predeterminada, Visual Studio usa referencias relativas cuando la referencia se agrega inicialmente, porque asume que la referencia es a un archivo en otra parte de su copia de trabajo.

Esto solía volverme loco, pero lo resolví de tres maneras diferentes:

  1. Al mantener mi código fuente en mi unidad D: significa que las DLL a las que se hace referencia en la unidad C: no se pudieron almacenar con rutas relativas.
  2. Persuadiendo a los poderes potenciales para que utilicen una única imagen / script para todas las estaciones de trabajo de desarrollador. Ahora que son todos iguales, los archivos están todos en el mismo lugar en la unidad C :.
  3. Al darse cuenta de que puede agregar carpetas a la clave de registro de AssemblyFolders , lo que significa que ya no tiene que usar rutas de ningún tipo para hacer referencia a conjuntos conocidos.

Al agregar una referencia a un proyecto de aplicación web en VS (2008 en este caso), el "hintpath" en el archivo csproj se crea como una referencia relativa. ¿Hay alguna forma (utilizando la GUI, sin editar manualmente el archivo) para hacer de esta una referencia absoluta (es decir, C: / Temp / DllName.dll)?

El problema que estoy encontrando es cuando las máquinas de compilación separadas tienen directorios de trabajo diferentes para el proyecto. Cuando la referencia es relativa y la dll referenciada no está dentro del directorio de trabajo del proyecto, la referencia relativa puede no apuntar a la misma ubicación en ambas máquinas.


Esta es una vieja pregunta, pero sigue siendo relevante. Me topé con él mientras buscaba una solución sobre cómo hacer referencia a ensamblajes desde un repositorio global de software de terceros.

Mi enfoque en este momento es similar a la respuesta escrita por thinkOfaNumber. En lugar de usar una ruta absoluta codificada, prefiero incrustar una variable de entorno en el archivo .csproj. La variable de entorno luego mantiene la ruta absoluta. Ejemplo:

<Reference Include="Foo"> <HintPath>$(THIRDPARTY_ROOT)/foo/3.1.0/bin/foo.dll</HintPath> </Reference>

Este nivel adicional de direccionamiento indirecto brinda la flexibilidad de tener diferentes rutas en diferentes máquinas de compilación (por ejemplo, sistema de desarrollador vs. servidor de compilación).

Sin embargo, todavía necesito editar manualmente el archivo .csproj para hacer esto.


Intente hacer clic con el botón derecho en las propiedades del proyecto, y luego vaya a Ruta de referencia y agregue allí las rutas codificadas.


La única forma que encontré para hacerlo es mediante la edición manual del archivo csproj después de agregar la referencia.

<Reference Include="foo, Version=1.2.3.4, Culture=neutral, ..."> <SpecificVersion>False</SpecificVersion> <HintPath>C:/absolute/path/foo.dll</HintPath> </Reference>

y sí, odio las rutas absolutas y toda la locura de implementación automática que crea, pero en este caso tengo que hacer referencia a un contenedor .NET que usa una DLL COM que tiene que ser "instalada" y hacer cosas en el registro, etc. un camino absoluto es el único camino a seguir.


Me gustaría ayudar, pero ¿por qué es necesario? Nunca he tenido que hacer esto nunca, desde vs.net beta 2003. Creo que hay otra pregunta más profunda aquí.

Si es necesario, puede probar la página Ruta de referencia en las propiedades del proyecto.


También nos encontramos con este problema. Queríamos usar rutas absolutas porque cada implementación creaba la carpeta Paquetes en diferentes ubicaciones (y también tenemos varias máquinas de compilació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 fue que podríamos establecer la ruta absoluta en el archivo NuGet.Config, los paquetes NuGet se restaurarían en esa ubicación durante una implementación, pero luego no pudieron encontrarlos todos durante el paso de MSBuild en la misma implementación.

Escribí un script de PowerShell para abordar 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 esta secuencia de comandos para que se ejecute como un paso de compilación de PowerShell antes de los pasos de MSBuild en nuestra implementación. 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 fuente de Visual Studio. (Si deseaba que cambiaran en el control de origen, probablemente podría ejecutar esto en PowerShell y registrar los cambios).