Tengo una aplicación C++ que está integrada en Visual Studio (2008) y enlaces a una DLL de Boost. Al depurar, parece que necesito copiar la DLL de Boost en la carpeta de depuración para que el exe que ejecuto en el IDE pueda vincularse a ella. Podría usar un paso posterior a la compilación para copiar el archivo DLL, pero me preguntaba si existe una configuración en Visual Studio que pueda darle una ruta de búsqueda adicional para archivos DLL mientras se depura.Evite copiar DLL de terceros en la carpeta de depuración
Respuesta
Aquí hay una ligera percepción errónea. Visual Studio en sí mismo no controla directamente la carga de DLL en una aplicación mientras está depurando. La carga de las DLL está directamente controlada por el sistema operativo. El sistema operativo busca un conjunto de directorios interesantes para las DLL cuando se solicita una carga.
La principal forma en que VS influye en las DLL cargadas es en virtud de copiarlas en el directorio de salida de compilación. Este suele ser el directorio en el que se ejecuta la aplicación y, por lo tanto, es una de las rutas en las que el sistema operativo buscará las DLL necesarias.
Qué directorios las búsquedas del sistema operativo se controlan por unos pocos elementos. El más fácil de modificar es la variable de entorno (creo que LIBPATH). En el modo de depuración, puede modificar esta variable de entorno para que apunte a su otro directorio y tener la carga DLL desde allí.
Sin embargo, no hay nada que pueda establecer directamente en Visual Studio.
Parece que puede modificar el entorno en el momento de la depuración configurando Entorno como RUTA = $ (RUTA);
Marqué esto como "la" respuesta porque fue la respuesta más útil. Lamentablemente, el bit que dice "no hay nada que pueda establecer en Visual Studio" no es correcto (en mi opinión) - vea mi comentario bajo la pregunta.Sin embargo, gracias por la propina. – Permaquid
No hay muchas opciones en Windows para las DLL implícitamente vinculadas al EXE. Corto de almacenar el DLL en la misma carpeta que el EXE, puede almacenarlo en un directorio que se enumera en la variable de entorno PATH. Solo se garantiza que se mostrará c: \ windows \ system32, no se puede usar razonablemente esa carpeta. Un instalador que cambie el entorno del sistema funcionaría, aún no es razonable.
La única opción real es almacenar el archivo DLL en el caché de WinSxS uno al lado del otro. Deberá escribir un manifiesto para que Windows pueda encontrar el archivo DLL. Y deberá escribir un instalador para colocar el archivo DLL en WinSxS. Dada la calidad de la documentación, tendrá que realmente, realmente querer hacer eso.
Si esto es solo una consideración para la depuración, entonces quizás no sea tan importante cambiar la RUTA en su máquina de desarrollo. Use el Panel de control, el applet del sistema.
Puede ampliar la RUTA en Visual Studio estableciendo la variable de entorno. Hay una buena explicación aquí: How do I set a path in visual studio?
- 1. Depuración de una DLL de terceros en Visual Studio?
- 2. Cómo copiar archivos DLL en la misma carpeta que el ejecutable usando CMake?
- 3. Evite mezclar bibliotecas de depuración y liberación
- 4. Instalar DLL de depuración de MS para la depuración remota
- 5. Visual Studio: DLL dependientes de copia de destino de carpeta
- 6. ¿Hay alguna forma mejor de copiar un dll nativo a la carpeta bin?
- 7. DLL duplicado en la carpeta "Dependencias detectadas"
- 8. ¿Cómo/dónde envío bibliotecas de terceros con una DLL .NET?
- 9. Copiar carpeta usando Copiar-Elemento - comportamiento diferente
- 10. ¿Cómo agregar dll de terceros en Tridion para C# TBB?
- 11. Programa de bloqueo de dll de terceros sin excepción lanzada
- 12. copiar la estructura de la carpeta sin las carpetas .svn
- 13. Cómo copiar un archivo de una carpeta a otra carpeta
- 14. Copiar archivos en la carpeta un directorio en python
- 15. Ejecutar mi archivo DLL de terceros con PowerShell
- 16. Maven Para copiar el archivo jar de la carpeta local
- 17. Cómo copiar recursos automáticamente a la carpeta de salida DCU
- 18. Evite copiar NSMutableArray para leer con escrituras multiproceso
- 19. Almacenamiento de referencia DLL en la carpeta solución de Visual Studio
- 20. Regsvr32 no puede encontrar el dll en la carpeta actual
- 21. VS2010 Publicar no copiar carpeta adicional desde la carpeta de Contenido
- 22. Copiar la base de datos de la carpeta de activos en un dispositivo sin raíz
- 23. Evite suscripciones de eventos duplicados en C#
- 24. Método más limpio para copiar archivos DLL nativos en un proyecto .NET
- 25. ¿Cómo uso Ant para copiar una carpeta?
- 26. Copiar carpeta recursivamente, excluyendo algunas carpetas
- 27. Ubicación de Dll de terceros en el control de versiones para el proyecto .NET
- 28. Evite la representación de comentarios en HTML
- 29. Evite la superposición de etiquetas en Gephi
- 30. Cuándo incluir/copiar código de terceros, en lugar de referencia/vincularlo?
http://stackoverflow.com/questions/1776060/how-to-make-visual-studio-copy-dll-to-output-directory –
La pregunta que se hace referencia se relaciona con el uso de un paso posterior a la construcción, que deseo evitar. – Permaquid
JaredPar proporcionó la pista para controlar el entorno, en lugar de buscar una ubicación de búsqueda de biblioteca de Visual Studio. Resulta que hay una configuración de Visual Studio que proporciona exactamente lo que quería, al (aparentemente) agregar otra ruta a la variable de entorno PATH: Propiedades de configuración> Depuración | Ambiente. Esto es por proyecto, y puede usar variables de entorno. La única pieza que falta es la documentación que describe exactamente cómo el entorno de depuración que deseo agregar se fusiona con el existente. – Permaquid