Tengo un proyecto de Visual Studio C ++ que se basa en un archivo DLL externo. ¿Cómo puedo hacer que Visual Studio copie este archivo DLL automáticamente en el directorio de salida (depuración / liberación) cuando construyo el proyecto?
visual-studio
visual-c++
dll
Estera
fuente
fuente
$ (OutDir) resultó ser una ruta relativa en VS2013, así que tuve que combinarlo con $ (ProjectDir) para lograr el efecto deseado:
Por cierto, puede depurar fácilmente los scripts agregando 'echo' al principio y observar el texto expandido en la ventana de salida de la compilación.
fuente
Los detalles en la sección de comentarios anterior no funcionaron para mí (VS 2013) al intentar copiar la dll de salida de un proyecto C ++ a la carpeta de lanzamiento y depuración de otro proyecto C # dentro de la misma solución.
Tuve que agregar la siguiente acción de compilación posterior (haga clic derecho en el proyecto que tiene una salida .dll) luego propiedades -> propiedades de configuración -> eventos de compilación -> evento posterior a la compilación -> línea de comando
ahora agregué estas dos líneas para copiar el dll de salida en las dos carpetas:
fuente
(Esta respuesta solo se aplica a C #, no a C ++, lo siento, leí mal la pregunta original)
He pasado por un infierno DLL como este antes. Mi solución final fue almacenar las DLL no administradas en la DLL administrada como recursos binarios y extraerlas a una carpeta temporal cuando se inicia el programa y eliminarlas cuando se desecha.
Esto debería ser parte de la infraestructura .NET o pinvoke, ya que es muy útil ... Hace que su DLL administrado sea fácil de administrar, tanto usando Xcopy como como referencia de proyecto en una solución de Visual Studio más grande. Una vez que haga esto, no tendrá que preocuparse por los eventos posteriores a la compilación.
ACTUALIZAR:
Publiqué el código aquí en otra respuesta https://stackoverflow.com/a/11038376/364818
fuente
Agregue COPY incorporado en el archivo project.csproj :
fuente
También puede hacer referencia a una ruta relativa, el siguiente ejemplo encontrará la DLL en una carpeta ubicada un nivel por encima de la carpeta del proyecto. Si tiene varios proyectos que usan la DLL en una única solución, esto coloca la fuente de la DLL en un área común accesible cuando configura cualquiera de ellos como Proyecto de inicio.
La
/y
opción copia sin confirmación. La/d
opción comprueba si existe un archivo en el destino y si lo hace, solo se copia si el origen tiene una marca de tiempo más reciente que el destino.Descubrí que al menos en las versiones más recientes de Visual Studio, como VS2109,
$(ProjDir)
no está definido y tuve que usarlo$(ProjectDir)
en su lugar.Dejar una carpeta de destino en
xcopy
debería ser el directorio de salida predeterminado. Eso es importante para entender que la razón por$(OutDir)
sí sola no es útil.$(OutDir)
, al menos en versiones recientes de Visual Studio, se define como una ruta relativa a la carpeta de salida, comobin/x86/Debug
. Si lo usa solo como destino, se creará un nuevo conjunto de carpetas a partir de la carpeta de salida del proyecto. Ej… bin/x86/Debug/bin/x86/Debug
. : .Combinarlo con la carpeta del proyecto debería llevarlo al lugar adecuado. Ex:
$(ProjectDir)$(OutDir)
. .sin embargo
$(TargetDir)
, proporcionará el directorio de salida en un solo paso.Lista de Microsoft de macros de MSBuild para versiones actuales y anteriores de Visual Studio
fuente