2011-02-24 49 views
24

Supongamos que tengo una ventana Forms/aplicación de consola proyectoC# con algunas referencias externas y referencias a otros proyectos de biblioteca de clases en la misma solución también.Cómo guardar archivos DLL en una carpeta diferente al compilar en Visual Studio?

Cuando construyo el formulario de proyecto Ventana , Quiero las bibliotecas referenciadas ser almacenados en un lugar diferente (por ejemplo:bin \ Release \ Bibliotecas), y no en la misma carpeta que el archivo .exe.

¿Es posible hacer?

+1

¿Hace referencia a ellos como referencia de archivo o como referencia de proyecto? – mellamokb

+1

con un paso posterior a la compilación, pero también tiene que cambiar su AppDomainSetup para establecer la ruta de búsqueda de ensamblajes; de lo contrario, los archivos DLL de la biblioteca nunca se cargarán. ¿Has pensado en eso? – rene

+0

@mellamokb ambos. Tengo referencias a proyectos en mi solución, y esos (y el WinForm también) tienen referencias a archivos .dll externos también. –

Respuesta

15

Hay 2 partes de su pregunta:

Cómo configurar soluciones para construir ensamblajes/EXE en carpetas de su elección - esto se configura a través de las propiedades del proyecto en VS (propiedades del proyecto -> construir -> ruta de salida). También valor de la propiedad "copiar local" de verificación en cada referencia.

Cómo cargar archivos de ensamblajes desde ubicaciones no predeterminadas (es decir, de su carpeta ... \ Libraries) - es necesario realizar cambios en el archivo app.config para agregar esta caminos no predeterminados a la ubicación de búsqueda de montaje (http://support.microsoft.com/kb/837908)

+4

Además de la segunda parte de esta respuesta, también busque en el elemento '' '.config' - le permite especificar otros (sub) directorios para buscar conjuntos – Basic

2

Establecer la ruta de referencia en las propiedades del proyecto.

También puede especificar dónde va su ejecutable compilado especificando la ruta de salida en las propiedades del proyecto.

1

Encontrará las mejores prácticas para la organización de las referencias del proyecto aquí: http://codebetter.com/patricksmacchia/2009/01/11/lessons-learned-from-the-nunit-code-base/

Mire bajo el capítulo "La verdadera opción local VisualStudio Proyecto de referencia + Copy es el mal!"

+0

Cita de la página referenciada:" el conjunto nunit.core .dll se duplica 21 veces al compilar la solución NUnit con VisualStudio. Significa que debe ser copiado/cargado/analizado 21 veces por el compilador C# que aparentemente no viene con una optimización de caché/hashCode para tal caso. " sino también "Y, de hecho, el código de NUnit está bastante bien estructurado. Este es el resultado de la decisión inicial de crear muchas asambleas". Por lo tanto, básicamente tener un montón de guías de ensamblados para un mejor código a expensas del tiempo de compilación. No es un mal trato. –

4

Las respuestas correctas se dieron antes. Solo mencionaré que hay un paquete nuget para esto llamado PrettyBin.

Instalarlo en su proyecto de inicio. Los archivos DLL y XML irán a una carpeta lib y tendrás un ejemplo de cómo funciona, si no quieres personalizarlos.

+0

¡La solución más fácil hasta ahora que simplemente funciona! ¡Gracias! – mandarin

+1

Tengo eventos posteriores a la compilación que copian el contenido de mi directorio de compilación en .zip. Estos eventos posteriores a la compilación parecen ejecutarse antes de que PrettyBin haga su 'limpieza'. ¿Sabes cómo puedo hacer que PrettyBin se ejecute antes de los eventos posteriores a la construcción? – jenovachild

+0

@jenovachild Probablemente ya no sea relevante, pero en caso de que alguien todavía se esté preguntando: PrettyBin solo agrega un paso After Build extra al archivo .csproj. Si necesita ejecutarlo antes/después de algún archivo específico, simplemente descargue su proyecto, abra el archivo .csproj y modifique el orden de los eventos AfterBuild. – Kajiyama

Cuestiones relacionadas