Tengo un problema con varios archivos DLL de VC++, que debo incluir en mi proyecto .NET/C#. Una DLL VC++ es una DLL C++/CLI, que utilizo como interfaz pública desde mi proyecto .NET. Las otras DLL están escritas en C++ nativo. No tengo acceso al origen de las DLL de VC++, solo tengo que usarlas.WinSxS no puede cargar archivos DLL de VC++
He realizado un proyecto de prueba .NET y he hecho referencia a la DLL C++/CLI. No hay problema, el compilador tiene suerte, genial. Solo hay un problema: cuando inicio el EXE del programa .NET, obtengo errores sobre las DLL de C++ debido a que faltan las DLL de núcleo de VC++. sxstrace muestra lo siguiente (abreviado):
INFO: Reference: Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195"
INFO: Reference: Microsoft.VC80.OpenMP,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195"
INFO: Resolving reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195"
...
ERROR: Cannot resolve reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195".
Ahora estoy no es tonto y trataron varias cosas. He leído mucho sobre WinSxS para obtener una comprensión más profunda de lo que está sucediendo. Ahora estoy en el punto, donde se está vendiendo para mí. El sistema donde quiero ejecutar el programa tiene instalado el paquete VC++ Redistributable en la versión actual 8.0.50727.762 (SP1). Sé que hay un archivo de política para Microsoft.VC80.CRT en winsxs que redirige todas las versiones de este ensamblado a la versión actual 8.0.50727.762 (esa es la solución para el problema en http://blogs.msdn.com/b/nikolad/archive/2007/03/29/a-solution-to-two-references-to-different-versions-of-crt-mfc-atl-in-one-application-manifest-file.aspx). Pero como dice el error anterior, este archivo de política no parece funcionar o no se tiene en cuenta. El sistema solo quiere encontrar la versión 8.0.50727.6195 del conjunto.
Ahora esa es la primera pregunta: ¿cuál es el problema aquí? Después de que entendí esto, pude resolver el problema inicial ...
La discrepancia de la versión es muy claro en el mensaje. Quiere 8.0.50727.6195, tiene 8.0.50727.762. Vaya a search.microsoft.com y ponga "8.0.50727.6195" en el cuadro de búsqueda. –
La pregunta es si es posible "persuadir" a la aplicación para que acepte 762 en lugar de 6195. – Dialecticus
No estoy seguro acerca de las versiones de Microsoft en este caso. No encontré un paquete VC++ 2005 Redist con la versión 8.0.50727.6195 en Microsoft Download; el paquete VC++ 2005 Redist actual viene en la versión 8.0.50727.762. Si 762 es por una versión superior a 6195, debería ser como he escrito: el archivo de políticas de WinSxS debe redireccionar 6195 a 762, pero no es así. – Matthias