Estoy usando Visual Studio 2008 para crear una solución con dos proyectos: una aplicación de consola C# y una DLL C++. Quiero que la aplicación llame a una función desde el dll usando P/Invoke. Por lo tanto, estoy tratando de agregar el dll como referencia a la aplicación C#. Pero cuando pruebo el comando Agregar referencia, Visual Studio no me deja hacerlo a menos que establezca la propiedad/clr en el dll (en Propiedades de configuración: General). Ahora, pensé que P/Invoke podría manejar dlls win32 simples. De hecho, si construyo mi dll sin/clr y simplemente lo copio a mano para bin/Debug, entonces la aplicación funciona bien. Entonces, ¿por qué se necesita/clr para agregar el dll como referencia? Y si VS no me deja agregarlo, ¿hay alguna solución (limpia) para que mi aplicación encuentre el dll?¿Agregar una referencia desde una aplicación C# a una DLL compilada sin/clr?
veo que alguien tenía un problema similar aquí (aunque con un DLL tercera parte): Unable to add a DLL Reference to VS 2008 La respuesta que obtuvo fue la de construir un envoltorio. Pero esto no es realmente necesario, ya que la aplicación puede usar el dll muy bien; es solo el paso Agregar referencia que no funciona. Y además, ¿el código del contenedor no necesita una referencia al dll, lo que plantea el mismo problema que antes? Realmente me gustaría una respuesta que no implique escribir un envoltorio en absoluto.
me escribió una etapa de pre-construcción para la aplicación de C# utilizando esta línea de comandos: copia "$ (SolutionDir) Depurar \ MathDll.dll" "$ (TargetDir)". Desgraciadamente, me gustaría que la funcionalidad "Agregar referencia" funcionara, porque ahora tengo que mantener esto, y supongo que será diferente para las compilaciones de lanzamiento ... Realmente no veo por qué "Añadir referencia" no debería manejar este tipo de cosas. –
Acabo de encontrar una manera un poco más clara de hacer esto. En lugar de utilizar un comando DOS anterior/posterior a la creación, agregué el dll al proyecto C# como un "elemento existente". Luego, bajo sus propiedades, configuro "Copiar en el directorio de salida" a "Copiar si es más nuevo". (Su "Acción de compilación" es "Contenido".) Esto todavía me parece un poco hackish, pero al menos soluciona el problema de depuración frente a versión, y es un poco más fácil de detectar. –
¡Vaya! Me di cuenta de que mi segunda solución no resuelve el problema de depuración frente a versión, porque hice referencia al dll desde la carpeta Debug. Por otro lado, la primera solución podría solucionar este problema cambiando el comando para copiar "$ (SolutionDir) $ (Configuration) \ MathDll.dll" "$ (TargetDir)". –