Die abhängige Assemblierung "Microsoft.VC90.MFC..... konnte nicht gefunden werden.



  • Hi Leute,

    ich habe ein Problem mit meinem Setup.
    Kurz zur History.
    Mein Projekt habe ich bis jetzt immer mit VS 2003 entwickelt.
    Bin jetzt auf VS 2008 umgesteigen. Läuft bis jetzt alles bestens.
    Das Setup.sln hab ich auch auf VS 2008 umgestellt.
    Bei generieren des msi linke ich die mfc90.dll, mfc90u.dll usw dazu.

    Wenn ich jetzt die xe starten will, kommt folgender Fehler:

    Fehler beim Generieren des Aktivierungskontextes für "C:\Users\Administrator\Desktop\TestApp.exe". Die abhängige Assemblierung "Microsoft.VC90.MFC,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b", type="win32", version="9.0.21022.8"" konnte nicht gefunden werden. Verwenden Sie für eine detaillierte Diagnose das Programm "sxstrace.exe".
    

    Im Winsxs verzeichniss befindet sich aber das :

    x86_microsoft.vc90.mfc_1fc8b3b9a1e18e3b_9.0.30729.1_none_dcc7eae99ad0d9cf
    


  • Ich denke, dass die Version 9.0.21022.8 im Minsxs Verzeichniss sein sollte.
    Oder?

    Wenn ja, wie sag ich dem Setup, dass er die Version nehmen soll?



  • Ich habe das Microsoft Visual C++ 2008 Redistributable Package (x86)
    installiert. Jetzt findet er das DebugCRT mit der Version 9.0.21022.8.
    Wie krieg ich das auf den ZielRechner?


  • Mod

    Nein! Wenn die neuere Version vorhanden ist, würde auch diese genutzt werden.

    Was machst Du denn auf dem Entwicklungssystem? Hast Du SP1 installiert?

    Was hat die Debug Version damit zu tun? Die bekommst Du auf keinen Zielrechner und dürftest auch nicht ausliefern. Diese Debug-DLLs gibt es nur in Verbindung mit dem Entwicklungssystem!



  • Ja das SP1 ist drauf.
    Wie bekomme ich den Eintrag DebugCRT aus dem manifest raus, unter Release?


  • Mod

    Indem alle Objektmodule auch wirklich im Relase Mode kompiliert wurden!

    Jedes Modul oder Library, die im Debug-Mode kompiliert wurde, die würde auch einen Debug-Manifest Eintrag erzeugen.



  • Ja schon, aber wenn ich doch ein Batch erstelle, und alle Module Release und Debug erstelle, dann sin doch alle als Release vorhanden.
    Gibt es irgendwo eine Eintsellung, oder sowas?


  • Mod

    Verwendest Du andere Libraries?



  • Ja.
    Dann muss ich alle Module (lib) kontrollieren, oder?

    Was ich mich aber frage, wie kommt der Eintrag im Manifest File rein?
    Die Version z.B. Woher holt er die Infos?
    Oder kann ich dem Compiler sagen, welche Version er verwenden soll?


  • Mod

    Dir Manifest Einträge (Informationen) stecken in den Objekt Dateien. Der Linker sammelt diese und wirft Sie aus.
    Wenn Du also Code Libraries hast (nicht nur Import-Libs), dann darf keine dieser DLLs mit einem Debug Build erzeugt worden sein!
    Das wäre sowieso ein fatales Problem, dass Du lösen musst.



  • OK.
    Aber wie kommt die Manifest auf die Version 9.0.21022.8?


  • Mod

    Das steht in den Header Dateien für die Objekt Datei die compiliert wurde.

    \Microsoft Visual Studio 8\VC\include\crtassem.h
    _CRT_ASSEMBLY_VERSION

    \Microsoft Visual Studio 8\VC\atlmfc\include\atlassem.h
    _ATL_ASSEMBLY_VERSION

    \Microsoft Visual Studio 8\VC\atlmfc\include\MFCassem.h
    _MFC_ASSEMBLY_VERSION

    Machst Du irgendwas mit _BIND_TO_CURRENT_... Defines?
    Das solltest Du bleiben lassen!



  • OK.
    Aber der Eintrag im Manifest DEBUG....... steht immer noch drin, obwohl ich alle Projekte nach einem debug im Release gesucht hab, und nix gefunden.

    Es müsste doch irgendwo unter Einstellungen im Release Mode unter Laufzeiteinstellungen DEBUG stehen, oder?
    Oder such ich an der falschen Stelle.....


  • Mod

    Dursuch doch deine Objekt Dateien im Release Folder nach dem falschen Eintrag.



  • Und wie?
    Wie kann ich diese Files anschauen und anpassen?


  • Mod

    Durchsuchen kannst Du sie mit jedem simplen Texttool. Die Manifesteinträge sind da so ziemlich im Klartext zu sehen.
    Anpassen sollst Du diese OBJ Dateien gar nicht.
    Du solltest Deine Projekte saber einstellen und nicht Debug+Relase mischen. Das Durchsuchen der Objektdateien ist nur ein Werkzeug!



  • OK. Hab es durchsucht, stehen auch 3 Einträge drin (Manifest).


  • Mod

    Und verwenden diese die Debug oder release DLLs? Jetzt weißt Du aus welchem "falschen" Projekt oder Einstellungen die Verweise stammen.



  • Hab ich nicht gesehen, dass ein DEBUG drin steht.
    Hab jetzt alles nochmals compiliert, und der Witz ist, dass im
    *.intermediate.manifest nur 2 Eintraäge sind, und im
    *.manifest 3 Einträge sind (mit DebugCRT).



  • Also ich habe jetzt folgendes festgestellt.
    Wenn ich ein BATCH erstelle, in dem ich die DEBUG und die RELEASE gleichzeitig generiere, da hat er die DebugCRT im Manifest drin.
    Compiliere ich aber nur die RELEASE, ohne Debug, dann macht er mir die Manifest Datei ohne den Eintrag.


Anmelden zum Antworten