2012-02-02 38 views
9

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 ...

+0

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. –

+0

La pregunta es si es posible "persuadir" a la aplicación para que acepte 762 en lugar de 6195. – Dialecticus

+0

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

Respuesta

8

Ok, ahora funciona, gracias por su ayuda.

me di cuenta de dos problemas que tuvieron que ser resuelto:

1) que tenía que instalar el "Microsoft Visual C++ 2005 Actualización de seguridad Service Pack 1 paquete redistribuible de MFC", que despliega la versión 8.0.50727.6195 del VC++ asambleas. Esta actualización era difícil de encontrar en los servidores de Microsoft, así que aquí está el enlace: http://www.microsoft.com/download/en/details.aspx?id=26347 Normalmente, solo se encuentra la versión 8.0.50727.762 ("Paquete redistribuible de Visual C++ 2005 Service Pack 1"), que está desactualizada. 6195, la instalación de la actualización resolvió el primer problema.

2) Mientras que la DLL C++/CLI se compiló en modo Release, las DLL C++ nativas que se muestran a continuación se entregaron en modo Debug. Ahora el acuerdo de licencia de Microsoft prohíbe implementar la depuración de VC++ DLL y los paquetes de VC++ REDIST no incluyen los archivos DLL de depuración de VC++ http://msdn.microsoft.com/en-us/library/aa985618.aspx dice:.

versiones de depuración de una la aplicación no se puede redistribuir y ninguna de las versiones de depuración de las diversas bibliotecas de vínculos dinámicos (DLL) de Visual C++ es redistribuible.

Solución: los desarrolladores de las DLL de C++ nativas Me dieron una versión de lanzamiento y todo funciona bien ...

+0

Nota para las generaciones futuras: El paso 1) resolvió "La aplicación no se ha podido iniciar porque su configuración de lado a lado es incorrecta", error no relacionado con la pregunta original. Podría funcionar para otros también, cuando fallan otras sugerencias. – shinjin

Cuestiones relacionadas