Frage

In Ordnung, nachdem eine Tonne Forschung zu tun und fast alle verwalteten CPP Redist versucht, ich kann auch versuchen, kopieren meine DLLs lokal an das ausführende Verzeichnis der app kann ich nicht herausfinden, was Abhängigkeiten i für diese gemischte bin fehlt Modus-Bibliothek.

Im Grunde habe ich eine große C # .NET-Anwendung und ich versuche, eine Mixed-Mode-Bibliothek zu verwenden, die ich machte. Auf der Entwicklungsmaschine funktioniert es perfekt (natürlich), aber eingesetzt, wenn die Bibliothek für die Nutzung es Ausnahmen, weil der fehlenden CRT Abhängigkeiten geladen werden muss (ich nehme an).

ich verwendet habe, Dependency Walker alle DLLs verwiesen zu überprüfen und dafür gesorgt, sie ohne Glück auf dem Deployment-Computer existiert, ich frage mich, ob es vielleicht einige Abhängigkeiten ist, die registriert werden müssen, dass ich fehle, aber ich kann nicht herauszufinden, was.

Ich erhalte die folgende Ausnahme, wenn der Code versucht, eine Klasse aus der gemischten Modus Bibliothek zu instanziiert.

  

Exception Detail:   System.IO.FileLoadException: Könnte nicht   Ladedatei oder Assembly ‚USADSI.MAPI,   Version = 1.0.3174.25238,   Culture = neutral, PublicKeyToken = null‘   oder eines ihrer Abhängigkeiten. Diese   Anwendung kann nicht gestartet werden   weil die Anwendungskonfiguration   ist falsch. Neu Installieren der   Anwendung könnte das Problem beheben.   (Ausnahme von HRESULT: 0x800736B1)

Ich bin die Erstellung der Bibliothek mit VS2008 SP1 mit / CLR: oldSyntax angegeben

.

Die Zwischen Manifest sieht wie folgt aus:

<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
</assembly>

Ich kann noch mehr Informationen liefern, wie gebraucht, leider bin ich nicht gut bei der Herstellung von gemischten Modus Bibliotheken versiert so die mir abgeworfen hat.

Wenn jemand einen Rat anbieten würde ich es sehr schätzen!

War es hilfreich?

Lösung

Haben Sie implementieren die CRT Bibliotheken auf dem Zielcomputer? Totale:., Da Sie eine Abhängigkeit von einem 32-Bit-Code haben, sollten Sie Zielplattform in der Build-Eigenschaft Registerkarte x86 gesetzt

EDIT: trouble-shoot Side-by-Side-Lösung von Problemen mit der Sxstrace.exe Dienstprogramm , auf Vista.

Andere Tipps

Normalerweise habe ich festgestellt, dass der Pragma Kommentar Stil Manifest decleration viel mehr fehlerfrei sein, von einem Entwickler maintenence und ein über alle Build Handlungsperspektive. Das XML-Manifest ist natoriously snafu .

Die fimiluarity mit, wie der Linker arbeitet und die übliche Zusammenstellung von C-Code und die Tatsache, dass man einfach diese tak in, auf ein Ihre Quelldateien, halten alles ein bisschen mehr „zusammen“ Gefühl;

#pragma comment(linker, \
    "\"/manifestdependency:type='Win32' "\
    "name='Microsoft.Windows.Common-Controls' "\
    "version='6.0.0.0' "\
    "processorArchitecture='*' "\
    "publicKeyToken='6595b64144ccf1df' "\
    "language='*'\"")

Ich hatte ein ähnliches Problem, das erste Mal, dass ich eine VS 2005-Anwendung auf einem Zielrechner im Einsatz - hatte die MSVCRT80 DLL bringen über. Wollen Sie damit sagen Sie bereits die 2008 VS-Laufzeitbibliothek dort haben?

ETA: Auch dumme Frage, aber sind Sie sicher, dass Sie sowohl die CRT-Runtime (oben verlinkt) und die .NET Runtime, mit der gleichen Version kompiliert gegen (vermutlich 3.5)? Sie wahrscheinlich bereits wissen, dass dies (besonders wenn man bedenkt Ihre Gäste), aber sie sind zwei verschiedene Dinge.

Ich fand eine Lösung, die zu funktionieren scheint, obwohl Ich mag es nicht sehr viel.

Ich hatte die Ordner zu kopieren:

Microsoft.VC90.CRT & Microsoft.VC90.MFC

Von: Program Files \ Microsoft Visual Studio 9.0 \ VC \ redist \ x86

In dem entfalteten Anwendungsverzeichnis, ich kann einfach nicht herausfinden, warum dies scheint zu funktionieren und die redistributables taten nichts.

EDIT: im Manifest der Suche ich wahrscheinlich nicht brauchen, das MFC-Verzeichnis kopieren

Die beste Weg, um dieses Problem zu lösen, ist Prozessmonitor zum Download, die frei ist: http://technet.microsoft.com/en-us/sysinternals/bb896645. aspx

einen Filter hinzufügen nur Ihren Prozess zu beobachten und es zeigt Ihnen alle Dateizugriff der Prozess versucht. Dies wird Ihnen genau zeigen, welche DLL es nicht finden kann.

ich dies immer verwenden, wenn sie mit dem gleichen Problem konfrontiert -. Wenn nur Microsoft in den Dateinamen in der ausgelöste Ausnahme gefüllt wäre alles leichter

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top