2008-10-27 25 views
11

Estoy usando una API de terceros que está definida en 2 DLL. He incluido esos archivos DLL en mi proyecto y he establecido referencias a ellos. Hasta aquí todo bien.C#: ¿Cómo incluir archivos DLL dependientes?

Sin embargo, estas DLL tienen al menos una DLL dependiente que no se puede encontrar en el tiempo de ejecución. Copié el archivo DLL que faltaba en el proyecto y configuré el indicador "Copiar a la salida" pero sin éxito.

¿Qué debería hacer aquí para indicarle al proyecto dónde debería encontrar la DLL dependiente?

aclaración intenté agregar una referencia a la DLL que falta pero como no se reconoció como un componente .Net. En mi desesperación, lo agregué directamente a la carpeta de salida, pero sin éxito.

Finalmente, instalé la API en la PC y todo funcionó. La instalación establece la variable PATH y la DLL se encuentra en la carpeta de instalación. ¿Pero cómo decirle al proyecto que busque en una de sus carpetas internas?

+0

Cuando dice que "copió la DLL que falta en el proyecto", ¿quiere decir que agregó una referencia o simplemente copió el archivo? Probablemente sea mejor agregar una referencia. –

Respuesta

2

Parece que necesita comprender mejor la biblioteca de terceros y cómo utiliza sus propias dependencias. Si la instalación de la API resuelve el problema, pero copiar los archivos manualmente no lo hace, entonces le falta algo. Hay un archivo faltante, o alguna variable de entorno o entrada de registro que se requiere. Dos cosas que realmente te ayudarán en esto es la herramienta de dependencia (que es parte de la instalación de C++) y procmon, que te dirá todas las claves de registro y los archivos que se usan en tiempo de ejecución.

Si tiene suerte, es solo un archivo que se está perdiendo. Si eso es todo, puede usar la sección "Crear eventos" del proyecto para copiar los archivos necesarios en la ubicación correcta en una compilación exitosa. De lo contrario, tendrá que resolverlo de otra forma, ya sea requiriendo que se instale la API o ejecutando su propio proyecto de instalación.

0

¿Cómo está desplegando? ¿Solo archivos planos? De ser así, debería funcionar siempre que el archivo termine en el directorio de salida del proyecto. ¿Lo hace?

Si está utilizando otra implementación, deberá indicarle a ese motor que la incluya. Esto es diferente para cada uno de msi/ClickOnce/etc.

0

Puede agregar lentamente las dependencias indirectas como referencias a su proyecto. Esto es engorroso y algo frágil

O podría utilizar una herramienta como "Depends.exe" de microsoft para inspeccionar los ensamblajes de nivel superior y obtener una lista de referencia para las dependencias.

Cuestiones relacionadas