Visual Studio: rutas de referencias de ensamblado relativas

96

Al agregar una referencia a un ensamblado ubicado dentro del directorio de la solución, ¿hay alguna forma de agregarlo relativamente, de modo que cuando se registre dentro y fuera de un repositorio se haga referencia correctamente en los proyectos?

theringostarrs
fuente
13
Si no funciona desde la interfaz de usuario, recuerde que puede editar manualmente el archivo .proj directamente y cambiar la ruta a relativa. Una vez que lo cambia de cualquier manera, permanece como lo puso.
Pavel Minaev
1
En Visual Studio 2010, las rutas de referencia se almacenan como relativas de forma predeterminada, por lo que si esto le sucede, algo más está mal. En mi caso, no hice caso de las DLL del control de versiones para poder compilar la solución, pero mis compañeros de trabajo no pudieron.
Giles Roberts

Respuestas:

124

Para ampliar el comentario original de Pavel Minaev: la GUI para Visual Studio admite referencias relativas con el supuesto de que su .sln es la raíz de la referencia relativa. Entonces, si tiene una solución C:\myProj\myProj.sln, cualquier referencia que agregue en subcarpetas C:\myProj\se agregará automáticamente como referencias relativas.

Para agregar una referencia relativa en un directorio separado, como C:/myReferences/myDLL.dll, haga lo siguiente:

  1. Agregue la referencia en la GUI de Visual Studio haciendo clic con el botón derecho en el proyecto en el Explorador de soluciones y seleccionando Agregar referencia ...
  2. Busque el * .csproj donde exista esta referencia y ábralo en un editor de texto
  3. Edite <HintPath> para que sea igual a

    <HintPath>..\..\myReferences\myDLL.dll</HintPath>

Esto ahora hace referencia C:\myReferences\myDLL.dll.

Espero que esto ayude.

CrimsonX
fuente
20
Entiendo que esto es útil y correcto, pero ¿la GUI de VS no proporciona en serio una forma de agregar una referencia relativa?
kdbanman
4
En VS 2015 obtuve este comportamiento por defecto (ruta relativa)
Mugen
2
Estaba convencido de que había agregado un camino absoluto, hasta que seguí sus instrucciones por curiosidad. VS mostró una ruta absoluta en las propiedades de referencia, pero <HintPath> se mostró como ya relativa. Resulta que me faltaban archivos O_o lolimaderp!
donutguy640
@ donutguy640 Eso también me confundió. También deberían mostrar la ruta relativa en el panel de propiedades
Alexander Derck
1
No tiene que editar directamente el archivo del proyecto. Seleccione "examinar" en el cuadro de diálogo Agregar referencia, navegue hasta la carpeta con el archivo de su proyecto y luego agregue la ruta relativa a su DLL. Aunque se muestra una ruta absoluta en la ventana de propiedades, la ruta relativa se guarda en el archivo del proyecto. VS realmente debería mostrar la ruta tal como está guardada en el archivo del proyecto.
Needfulthing
9

Sí, simplemente cree un directorio en su solución como lib /, y luego agregue su dll a ese directorio en el sistema de archivos y agréguelo en el proyecto (Agregar-> Elemento existente-> etc.). Luego agregue la referencia basada en su proyecto.

He hecho esto varias veces bajo svn y bajo cvs.

Freddy
fuente
5
No es necesario que agregue el dll al proyecto en sí, solo agregue una referencia. Lo mejor que puede hacer es agregar todo el directorio 'lib' a su control de código fuente. Ver code.google.com/p/projectpilot/source/browse/#svn/trunk como ejemplo
Igor Brejc
1
Tienes razón. Revisé un proyecto antiguo y ni el directorio ni los dlls se agregaron al proyecto en sí, solo al repositorio. Y la referencia es entonces relativa al proyecto. Lo siento por eso.
Freddy
3

En VS 2017 es automático. Tan Add Referencecomo de costumbre.

Tenga en cuenta que en Reference Propertiesla ruta absoluta se muestra, pero en .vbproj/.csprojrelativa se utiliza.

<Reference Include="NETnetworkmanager">
      <HintPath>..\..\libs\NETnetworkmanager.dll</HintPath>
      <EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
Iurii Vasylenko
fuente
2

Probablemente, la forma más fácil de lograr esto es simplemente agregar la referencia al ensamblaje y luego (manualmente) parchear la representación textual de la referencia en el archivo de proyecto de Visual Studio correspondiente (extensión .csproj) de modo que se vuelva relativo.

He hecho esto muchas veces en VS 2005 sin ningún problema.

Uwe Honekamp
fuente
3
Creo que no es necesario modificar el archivo del proyecto manualmente. En mi experiencia, Visual Studio siempre usa parches relativos. La única vez que tuve que modificar el archivo del proyecto a mano fue cuando quería compartir un archivo de clave (.snk). Visual Studio siempre solo copia el archivo de clave en el directorio del proyecto, lo que da como resultado varias copias del archivo de clave.
Stefan Egli
1

Puede que me quede fuera de aquí, pero parece que la respuesta es bastante obvia: mire las rutas de referencia en las propiedades del proyecto. En nuestra configuración, agregué nuestra carpeta de repositorio común, a la ventana GUI de ruta de referencia, así

Rutas de referencia en VS20xx

De esa manera puedo copiar mis dlls (listos para publicar) en esta carpeta y cada desarrollador ahora obtiene la DLL actualizada cada vez que crea desde esta carpeta.

Si el dll se encuentra en la Solución, el constructor debe priorizar la versión local sobre la versión publicada del equipo.

cristiano
fuente
Desafortunadamente, esto se mantiene en el archivo csproj.user y no es relativo.
Jamie Kitson
0

Como se mencionó anteriormente, puede editar manualmente el .csprojarchivo de su proyecto para aplicarlo manualmente.

También noté que Visual Studio 2013 intenta aplicar una ruta relativa a la ruta de sugerencia de referencia, probablemente debido a un intento de hacer que el archivo del proyecto sea más portátil.

Nick L.
fuente