¿Cómo configuro la ruta a un archivo DLL en Visual Studio?

130

Desarrollé una aplicación que depende de un archivo DLL. Cuando depuro mi aplicación, la aplicación se queja de que:

"Esta aplicación no pudo iniciarse porque no se encontró xxx.dll".

Así que tengo que copiar el archivo DLL en el mismo directorio que mi archivo .vcproj.

¿Hay alguna manera de configurar el proyecto para buscar el archivo DLL en (preferiblemente) alguna ruta relativa o (no preferida) alguna ruta absoluta?

Concepto similar a cómo establecemos incluir y ruta de la biblioteca en la configuración del proyecto.

Quiero decir que cuando depuro mi aplicación (presionando F5), aparecerá el error anterior.

sivabudh
fuente

Respuestas:

196
  1. Ir a las propiedades del proyecto (Alt + F7)
  2. En Depuración, mira a la derecha
  3. Hay un campo de Medio Ambiente.
  4. Agregue su ruta relativa allí (relativa a la carpeta vcproj), es decir, \ some-framework \ lib agregando PATH=%PATH%;$(ProjectDir)\some-framework\libo anteponiendo a la rutaPATH=C:\some-framework\lib;%PATH%
  5. Presione F5 (depuración) nuevamente y debería funcionar.
sivabudh
fuente
15
El campo Entorno toma NOMBRE = VALOR pares delimitados por punto y coma. Agregue a la variable PATH para que el Depurador VS busque ubicaciones adicionales para DLL: PATH =% PATH%; $ (ProjectDir) lib
Brent Faust
1
¿Hay una manera similar de hacer para la versión de lanzamiento también?
Narek
Necesitaba agregar la ruta dll a la variable $ (LibraryPath) (o incluirla en la lista en Directorios de biblioteca en la configuración de Propiedades de configuración-> Directorios VC ++).
Foster Boondoggle
1
@ SlippD.Thompson Sí, tienes razón. Pero puede lograr lo mismo usando Alt + p, p en su lugar.
Jenix
1
@ SlippD.Thompson Ah, al leer tu comentario nuevamente, creo que no entendí lo que querías decir. Sí estoy de acuerdo. Pero al menos, hay algunas teclas de acceso rápido que nunca cambian en Visual Studio, y 'Alt + p, p' es una de ellas. Estaba allí junto con 'Alt + F7', lo que significa ahora algo más como sabes. Además, 'Alt + p, p' solo significa 'Menú de proyecto> * Propiedades'.
Jenix
7

La ruta de búsqueda que utiliza el cargador cuando llama a LoadLibrary () puede modificarse mediante la función SetDllDirectory () . Por lo tanto, puede llamar a esto y agregar la ruta a su dependencia antes de cargarlo.

Consulte también Orden de búsqueda de DLL .

i_am_jorf
fuente
7

Ir a través de las propiedades del proyecto -> Rutas de referencia

Luego agregue una carpeta con DLL

kravits88
fuente
44
No publique respuestas idénticas a varias preguntas. Publique una buena respuesta, luego vote / marque para cerrar las otras preguntas como duplicados. Si la pregunta no es un duplicado, adapte sus respuestas a la pregunta.
durron597
1
de lejos la mejor respuesta :)
Rathma
2
Esto no parece estar disponible en Visual Studio 2015 en un proyecto C ++. ¿Qué combinación de versión de Visual Studio y tipo de proyecto admite esta opción?
Filip Bártek
La pregunta de OP era sobre C ++ pero esta respuesta es para C #.
Jenix
No funcionó para mí con C # y VS2017
mherzog
4

Otra posibilidad sería establecer Working Directorydebajo de las opciones de depuración para que sea el directorio que tiene esa DLL.

Editar: iba a mencionar el uso de un archivo por lotes para iniciar Visual Studio (y establecer la variable PATH en el archivo por lotes). Entonces busqué un poco y vi que esta misma pregunta se hizo hace poco en esta publicación . La respuesta sugiere la opción de archivo por lotes, así como la configuración del proyecto que aparentemente puede hacer el trabajo (no lo probé).

Mark Wilkins
fuente
¿Qué pasa si dependo de 2 dlls, cada uno vive en su propio directorio? (simplifiqué mi pregunta anterior)
sivabudh
No creo que sea posible hacer que esta solución funcione para más de un directorio.
Mark Wilkins el
3

En las propiedades del proyecto (haga clic con el botón derecho en el proyecto, haga clic en el botón de propiedades) ▶ Propiedades de configuración ▶ Eventos de compilación ▶ Eventos posteriores a la compilación ▶ Línea de comandos.

Edite y agregue una instrucción a la línea de comando. por ejemplo, copie botan.dll desde la ruta de origen a la ubicación donde se está ejecutando el programa.

copy /Y "$(SolutionDir)ProjectDirs\x64\Botan\lib\botan.dll" "$(TargetDir)"

Propiedades del proyecto

Joma
fuente
No tengo idea de si es correcto hacerlo, pero el IDE me da esa opción y ha sido útil, creo que es una buena opción si quiero copiar todos los archivos necesarios a otra carpeta para distribuir su programa. Hechizo simple pero efectivo. Aquí en esta pregunta hay diferentes respuestas para llegar al mismo fin. Pero uso esta opción y evito muchos dolores de cabeza.
Joma
Las otras opciones no funcionaron para mí, solo esta, pero parece que las otras deberían ser el camino correcto.
rjferguson
-1

Sé que esta pregunta se había respondido hace años, pero para aquellos como yo que necesitaban cambiar el lugar donde el depurador inicia la aplicación, cambie la propiedad del comando en Propiedades del proyecto -> Depuración.

TheOriginalCole
fuente