2009-05-13 21 views
9

Tengo un proyecto A de C# que utiliza una DLL de contenedor .NET y una DLL nativa. Agrego el .NET contenedor DLL a la lista de referencia del proyecto A. Dado que el contenedor DLL solo funciona con el archivo DLL nativo cuando están en la misma carpeta, el archivo DLL nativo debe copiarse en el directorio de salida del proyecto A. Logro esto agregando el archivo DLL nativo como un archivo de contenido en el proyecto A y establezca su acción de copia para copiar si es más reciente. Esto esta bien.Por qué la DLL nativa no se copia en el directorio de salida

Si un proyecto C# B tiene referencia directa al proyecto A, VS copiará todos los archivos dependientes utilizados por el proyecto A al directorio de salida del proyecto B. Esto significa que el contenedor DLL y el DLL nativo se copiarán en la salida del proyecto B directorio también. Esto funciona bien también.

Luego tengo otro proyecto C de C, que solo se refiere directamente al proyecto B, no al proyecto A. Es interesante ver que VS no copiará el archivo DLL nativo al directorio de salida del proyecto C, que es lo que Intentar hacer lo contrario cuando el proyecto C usa la funcionalidad del proyecto B y busca la DLL nativa para trabajar con la DLL contenedora, no la encontrará.

¿Alguien puede explicar por qué VS no copia la DLL nativa en el directorio de salida del proyecto C? ¿Cuál es el mecanismo para copiar archivos dependientes de cadenas en VS? Muchas gracias.

Respuesta

6

Básicamente, las cadenas de referencia no se propagan, y corresponde al ensamblaje superior (el exe, sitio web, etc.) asegurarse de que tiene todo lo que necesita, ya sea localmente o en (por ejemplo, con dlls gestionados) el GAC. Deberá agregar los archivos al exe/sitio web como "copiar a la salida".

+0

¿Puede ser más específico sobre la forma de "añadir los archivos a la exe (estamos hablando de exe no página web aquí) como copia ot output "? Muchas gracias. – Steve

+1

Debería simplemente repetir los archivos de implementación necesarios en el proyecto del ejecutor y marcarlos para copiarlos a la salida. –

0

¿Por qué no acaba de agregar el dll nativo como referencia en el proyecto A? Esto asegurará que siempre estará incluido cuando otras bibliotecas utilicen A.

Editar: No importa, esto solo funciona si el dll es un componente COM o .NET.

+0

Esta es una excelente idea. Al menos, así es como yo ASUMIRÍA VS FUNCIONA. Yo no – Eric

0

Debido a que no hay una dependencia explícita en el proyecto, el constructor no sabe que se deben generar con los binarios conocidos. Lo que puede hacer es crear una configuración posterior a la compilación para copiar esos archivos DLL a un destino de compilación al momento de la compilación. Puede Google how to do that, aquí está uno de los primeros resultados que explica cómo hacer esto:

http://visualstudiohacks.com/articles/general/customize-your-project-build-process/

Cuestiones relacionadas