2012-02-02 18 views
9

Ho un problema con diverse DLL VC++, che dovrei includere nel mio progetto .NET/C#. Una DLL VC++ è una DLL C++/CLI, che utilizzo come interfaccia pubblica dal mio progetto .NET. Le altre DLL sono scritte in C++ nativo. Non ho accesso alla fonte delle DLL VC++, devo solo usarle.WinSxS non riesce a caricare DLL VC++

Ho creato un progetto di test .NET e ho fatto riferimento alla DLL C++/CLI. Nessun problema, il compilatore è fortunato, fantastico. C'è solo un problema: quando avvio l'EXE del programma .NET, ottengo errori sulle DLL C++ a causa di DLL core VC++ mancanti. sxstrace mostra la seguente (abbreviato):

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

Ora io non sono pazzo e provato diverse cose. Ho letto molto su WinSxS per avere una comprensione più profonda di cosa sta succedendo. Ora sono arrivato al punto, dove sta diventando stanco per me. Il sistema in cui voglio eseguire il programma ha il pacchetto Redistributable VC++ nella versione corrente 8.0.50727.762 (SP1) installato. So che esiste un file di criteri per Microsoft.VC80.CRT in winsx che reindirizza tutte le versioni di questo assembly alla versione corrente 8.0.50727.762 (questa è la soluzione per il problema in 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). Ma come dice l'errore sopra, questo file di politica non sembra funzionare o non viene preso in considerazione. Il sistema vuole solo trovare la versione 8.0.50727.6195 dell'assembly.

Questa è la prima domanda: qual è il problema qui? Dopo aver capito, ho potuto risolvere il problema iniziale ...

+0

La mancata corrispondenza versione è cristallina nel messaggio. Vuole 8.0.50727.6195, hai 8.0.50727.762. Vai a search.microsoft.com e inserisci "8.0.50727.6195" nella casella di ricerca. –

+0

La domanda è se è possibile "convincere" l'applicazione ad accettare 762 anziché 6195. – Dialecticus

+0

In questo caso non sono sicuro del controllo delle versioni di Microsoft. Non ho trovato un pacchetto Redist VC++ 2005 con versione 8.0.50727.6195 in Download Microsoft, l'attuale pacchetto Redist VC++ 2005 è disponibile nella versione 8.0.50727.762. Se 762 è per versione superiore a 6195, dovrebbe essere come ho scritto: il file di politica di WinSxS dovrebbe reindirizzare da 6195 a 762, ma non è così. – Matthias

risposta

8

Ok, ora funziona, grazie per il vostro aiuto.

ho capito due problemi che dovevano essere risolti:

1) ho dovuto installare "Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package MFC Security Update", che distribuisce la versione 8.0.50727.6195 del VC++ assiemi. Questo aggiornamento è stato difficile da trovare sui server Microsoft, quindi ecco il collegamento: http://www.microsoft.com/download/en/details.aspx?id=26347 Normalmente si trova solo la versione 8.0.50727.762 ("Pacchetto ridistribuibile di Visual C++ 2005 Service Pack 1), che non è aggiornato. 6195, l'installazione dell'aggiornamento ha risolto il primo problema

2) Mentre la DLL C++/CLI è stata compilata in modalità di rilascio, le DLL native C++ di seguito sono state fornite in modalità debug. Ora il contratto di licenza Microsoft vieta la distribuzione del debug VC++ DLL ed i pacchetti di VC++ redist non includono i debug DLL di VC++ http://msdn.microsoft.com/en-us/library/aa985618.aspx dice:.

versioni di debug di un l'applicazione non è ridistribuibile e nessuna delle versioni di debug delle varie librerie di collegamento dinamico (DLL) di Visual C++ è ridistribuibile.

Soluzione: gli sviluppatori delle DLL native C++ mi ha dato una versione di rilascio e tutto funziona bene ...

+0

Nota per le generazioni future: passaggio 1) risolto il problema "L'applicazione non è stata avviata perché la configurazione affiancata è errata" non correlata alla domanda originale. Potrebbe funzionare anche per gli altri, quando altri suggerimenti falliscono. – shinjin

Problemi correlati