Tengo una aplicación GUI de C# que hace referencia a un proyecto administrado de C++, que requiere 7 DLL C++ nativas. Estoy buscando el método más limpio para copiar estos 7 archivos DLL al resultado final del proyecto.Método más limpio para copiar archivos DLL nativos en un proyecto .NET
lo que funciona
Añadir todos los archivos DLL a las aplicaciones C#, especificando:
Acción de generación == "contenido"
Guardar en agenda == Copiar siempre"
salida Esto hará que la carpeta base del proyecto sea un lío de DLL en algunos casos, todos los cuales son requisitos de proyectos referenciados, y no ese proyecto en sí.
lo que no funciona
- La incorporación de estos archivos DLL en una carpeta llamada "DLL required" por los ajustes anteriores. Lo copia en una carpeta con el mismo nombre en la salida, lo que causa que estén en una ubicación incorrecta. No veo una forma de especificar el directorio de salida.
- Recursos incrustados: en C# P/Invoke, puede agregar archivos DLL a los que hace referencia como recursos incrustados, y los archivos DLL están incrustados dentro de su biblioteca final. No veo esta posibilidad en Managed C++, y ni siquiera estoy seguro si funciona con cadenas de referencia.
- Agregando las DLL como contenido dentro del proyecto de C++ administrado. Los archivos no se copian en el directorio de salida.
¿Cuál es la mejor solución en este caso? Prefiero que el proyecto Managed C++ pueda manejar sus propios requisitos de DLL, si es posible, y preferiblemente de una manera que no evite que el proyecto se use en múltiples aplicaciones.
En cuanto a tener un proyecto limpio, ¿es mejor insertar todos mis archivos de código dentro de las subcarpetas en el proyecto y tener los archivos DLL en la raíz para que la primera solución funcione?
Solución:
El uso de la sugerencia posterior a la generación de Joseph, el siguiente comando hace el truco para utilizar una carpeta "Obligatorio DLL".
xcopy "$ (projectdir) DLL obligatorios *. *" "$ (TargetDir)"/Q/Y
/Q oculta los archivos individuales desde la salida, y/Y suprime sobrescribir mensajes .
Ni siquiera pensé en un evento de construcción posterior por el motivo que fuera. Esto funciona bastante bien para mí, y he publicado la construcción posterior exacta que utilicé en la pregunta. Gracias. –