Nuestro producto se basa en un grupo de proyectos C++, pero ahora estamos utilizando proyectos C# para el front-end. Ahora también estamos haciendo una versión de 64 bits.
Nuestro plan es construir todos los dlls C# como AnyCPU. Los proyectos de C# tendrán referencias a los dlls de C++ en una carpeta bin común. Al compilar x64, la carpeta bin contendrá versiones x64 de nuestros dlls de C++ y al compilar Win32, la carpeta bin contendrá versiones de 32 bits de nuestros dlls de C++. Entonces, los proyectos de C# construirán AnyCPU pero incluirán x64 o Win32 C++ dll.
Mi pregunta es, ¿funcionará? En tiempo de ejecución, todo debe ser 32 o 64 según el ejecutable que se ejecute, pero ¿puede compilar el tiempo manejar un proyecto que apunta a AnyCPU que incluye un dll específico de la plataforma? ¿O tendremos que hacer versiones específicas de plataforma de todos nuestros dlls C#? Gracias¿Puede un proyecto C# AnyCPU incluir un dll específico de plataforma?
Respuesta
Por lo que recuerdo, esto funciona.
Tenía solo 32bit DLL, C# compiled y se bloqueó al iniciar. Entonces, si colocas allí 64bit DLL, creo que no necesitas recompilar C#.
Lo he hecho. Aunque da advertencias de compilación.
Debería funcionar, he utilizado este enfoque en el pasado y funciona bien. ¿Qué tipo de advertencias de compilación recibes?
Esto es principalmente un problema de implementación, obteniendo las DLL correctas seleccionadas para el sistema operativo correcto. Bastante sencillo si crea dos proyectos de configuración, uno para x86 y otro para x64.
También es posible hacerlo funcionar de forma transparente. Creará, digamos, un subdirectorio x86 y x64 en el directorio que contiene su EXE y colocará respectivamente las compilaciones de 32 bits y 64 bits de las DLL en esos subdirectorios. Al inicio, compruebe IntPtr.Size para conocer el bit-ness de su proceso. Luego pinvoke SetDllDirectory en consecuencia para que Windows encuentre la DLL correcta. De esta manera:
using System.Runtime.InteropServices;
using System.Reflection;
using System.IO;
...
public static void SetupDllDirectory() {
string path = Assembly.GetEntryAssembly().Location;
path = Path.Combine(path, IntPtr.Size == 8 ? "x64" : "x86");
bool ok = SetDllDirectory(path);
if (!ok) throw new System.ComponentModel.Win32Exception();
}
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool SetDllDirectory(string path);
Utilice un evento de compilación posterior para copiar los archivos DLL. El uso de Environment.SetEnvironmentVariable() para agregar el directorio a la variable de entorno PATH es otro enfoque.
- 1. Managed C++ y AnyCPU
- 2. Compilar un proyecto C# en un dll
- 3. Hacer una DLL de un proyecto C#?
- 4. Convierta un proyecto completo en una DLL
- 5. Agregar DLL de C++ a un proyecto de C#
- 6. C#: ¿Cómo incluir archivos DLL dependientes?
- 7. ¿Cómo puede incluir/referenciar un archivo en un proyecto sin copiarlo en el directorio del proyecto?
- 8. Comenzando con un proyecto de C + + de plataforma cruzada
- 9. C++ Deshabilitar las advertencias en un específico incluir
- 10. ¿Puede un ensamblado C# .dll contener un punto de entrada?
- 11. No se puede cargar .dll AMD de 64 bits en un IA plataforma de 32 bits
- 12. Cómo minimizar un tamaño de DLL del proyecto ASP.NET C#?
- 13. Actualizar un dll de referencia en un proyecto C# sin volver a compilar el proyecto
- 14. ¿Puede Ruby importar un dll de .NET?
- 15. Usando C++ DLL en el proyecto C#
- 16. ¿Cómo se puede acceder a la plataforma de nivel de solución de Visual Studio desde un evento de compilación de un proyecto C#?
- 17. C++ enganchando un dll?
- 18. ¿Se puede usar un DLL de .NET 4.0 en un proyecto de 3.5?
- 19. usando C# dll en proyecto C++
- 20. Cómo agregar dll en el proyecto C#
- 21. La adición de un archivo DLL para un proyecto de C#
- 22. cómo incluir un archivo javascript específico para cada vista angularjs
- 23. ¿Cómo se puede combinar un archivo DLL de Windows C++ en un exe de aplicación C#?
- 24. MSBUILD: error MSB1008: solo se puede especificar un proyecto
- 25. Crear una DLL en C y vincularla desde un proyecto de C++
- 26. ¿Qué tecnología de pila/plataforma usar para un proyecto?
- 27. C# update DLL sin recompilar el proyecto
- 28. C# Solution, ¿pueden todos los proyectos apuntar a AnyCPU, excepto uno que debe ser x86?
- 29. ¿Cómo incluir un proyecto de Java en un proyecto de Android?
- 30. Rendimiento de una aplicación C# basada en AnyCPU vs plataforma x64 en una máquina de 64 bits