2008-09-24 21 views
8

Llamo a un DLL no-.NET desde mi proyecto usando P/Invoke, lo que significa que el .dll siempre debe estar presente en el directorio de .exe.Especificando una dependencia que no sea .NET en Visual Studio

¿Hay alguna manera de decirle a Visual Studio sobre esta dependencia, de modo que copie automáticamente el .dll en el directorio de salida al compilar e incluirá automáticamente el .dll en la configuración? ¿O tengo que hacer esto manualmente?

Respuesta

5

Puede copiar/vincular este (s) archivo (s) al proyecto, y en propiedades, configure "Crear acción" a "Ninguno" y "Copiar al directorio de salida" a "Copiar si es más nuevo" o "Copiar siempre".

O puede utilizar un "Eventos de preconstrucción" & "Eventos posteriores a la compilación" donde puede especificar cualquier secuencia de comandos por lotes.

Prefiero la segunda opción, porque de esta manera es más flexible que la primera.

También puede modificar un archivo MSBuild y agregar una tarea para copiar el archivo (s).

+0

Gracias, la primera opción es lo que estaba haciendo - me pregunto si había una manera mejor – Grokys

8

Simplemente puede agregar .DLL a su proyecto.

seleccione el panel Properties para ese archivo y establecer Build Action a Content y Copy to Output Directory a Copy if newer.

+0

Build Action = "Contenido" es mejor que Build Action = "None" sugerido en otra respuesta. Esto se debe a que puede incluir fácilmente archivos de "Contenido" en un proyecto de instalación. – Joe

+0

Sí, y esa es exactamente la razón por la que sugerí eso en mi respuesta. –

+0

> eso es exactamente por lo que sugerí que en mi respuesta Y por qué he votado su respuesta :) – Joe

2

Creo que un problema con solo agregar un .DLL al proyecto es que puede necesitar versiones diferentes de una DLL para las compilaciones de depuración y liberación. Creería que puede agregar versiones de depuración y versión del archivo DLL al archivo y, según las configuraciones, excluir el inadecuado, pero no pude encontrar la manera de hacerlo. Estoy usando Visual Studio 2010. Estoy seguro de que esto funcionó en los viejos tiempos con VS6.

+0

Puede editar manualmente el archivo .csproj para agregar una condición al nodo de contenido de la DLL: Alternativamente, puede usar un paso previo a la compilación para copiar MyDLL. Debug.dll o MyDLL.Release.dll a MyDLL.dll según la configuración actual. (Creo que debería poder hacer esto a través de la página de propiedades del Proyecto en VS, cambiando de Debug a Versión) – bruceboughton

+0

Respondido aquí http://stackoverflow.com/a/33436918/1889784 –

Cuestiones relacionadas