Tenemos un (puro C++ nativo) .DLL construido por VS. Como clientes, tenemos algunas aplicaciones C++ nativas y .Net-Wrapper alrededor de esta DLL escrita en C++/CLI. Finalmente, hay algunas aplicaciones de cliente para .Net-Wrapper escritas en C#.¿Cómo vincular un .DLL estáticamente?
Mi problema es que native.dll debe distribuirse de una manera diferente a como funciona el mundo .Net y el VS no realiza un seguimiento de esa DLL. Para que todas mis aplicaciones C# funcionen correctamente, tengo que copiarlas en cada directorio ejecutable o ponerlas en algún lugar en% PATH% (lo cual evitaría en las computadoras reveladoras ya que pueden querer iniciar diferentes aplicaciones con diferentes versiones de la DLL) . Se producen problemas aún mayores si hay UserControls que hacen referencia a la Wrapper-DLL: debe copiar la DLL al directorio de VS o de nuevo a% PATH%. Pero el peor caso ocurre con nuestra herramienta de traducción. Esta herramienta realiza un seguimiento de .Net-Assemblies y los empaqueta en Translator-packages que se pueden enviar a un traductor externo. ¡Hasta donde yo sé, no hay forma de poner el .DLL nativo en ese paquete!
Así que planeo vincular la DLL nativa estáticamente en .Net-Wrapper que resolvería mis problemas. Pero para nuestras aplicaciones nativas esta DLL nativa debe seguir siendo una DLL.
Así que tienen dos opciones:
- hacer dos proyectos de que (una que genera una biblioteca estática, y uno que crea una dinámica => Trato de evitar esto)
- Encontrar una solución vincular DLL estáticamente
- encontrar una manera de dejar que VS generar dos salidas de un proyecto
que puede ser un poco tonto aquí, pero no entiendo por qué sus aplicaciones nativas no puede usar el dll nativo, y sus aplicaciones .net usan el dll C++/cli-wrapped. – Niklas
Pueden ambos. Pero el Wrapper-DLL hace referencia a la DLL nativa, por lo que mis aplicaciones C# necesitan ambas. Lo cual está bien para el contenedor pero es doloroso para la DLL nativa. – mmmmmmmm
¿Por qué no crear una lib para el dll? Dijiste que construiste el dll usando VS, ¿no? –