2011-01-12 7 views
4

Die Ausnahme fehlt, ist:Assembly.LoadFile() throws Exception über manifest

Das Modul erwartet wurde, eine Baugruppe manifest enthalten. (Ausnahme von HRESULT: 0x80131018)

ich es an der Linie:

Assembly lvAssembly = Assembly.LoadFile(aPathFileName); 

Die Datei geladen wird ein Plugin ist, die von einer anderen Anwendung erzeugt wird. Wenn ich die Target Framework Version des Plugins von 4.0 auf 3.5 ändere und neu kompiliere. Das Plugin lädt gut. Ich verstehe nicht, warum die Assembly.LoadFile-Methode interessieren würde, für welche Version des .NET-Frameworks das Plug-in kompiliert wurde.

Das Zielframework für die Anwendung zu ändern, die das Plugin auf 4.0 lädt, hat nicht geholfen.

+0

Ist Ihr aPathFileName auf "real" .net Assembly (nicht nur win32 dll?) –

Antwort

6

Der erste Teil Ihrer Frage ist das erwartete Ergebnis, CLR Version 2 kann .NET 4.0-Assemblys nicht laden, das Metadatenformat hat sich geändert.

Der letzte Absatz ist schwerer zu erklären. Es könnte etwas mit der Verwendung von LoadFile() zu tun haben, es ist ein wunderbarer Weg, um Baugruppen zu laden. Ein möglicher Fehlermodus ist, dass Ihre Plug-In-Assembly möglicherweise noch Verweise auf 2.0-Assemblys enthält. Dies ist ziemlich normal, wenn es einen Verweis auf eine weitere Assembly enthält, die kompiliert wurde, um ein früheres Framework zu targetieren. Dies wird normalerweise automatisch vom Assembly Loader aufgelöst, es ersetzt lediglich die 2.0-Referenz durch die entsprechende 4.0-Referenz.

Sie können diese Theorie mit ildasm.exe überprüfen, führen Sie es auf der Plug-in-Assembly und durchsucht das Manifest für. Assembly-Anweisungen. Die Versionsnummer ist leicht zu sehen, Sie erhalten so etwas wie

.assembly extern mscorlib as mscorlib_2 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89) 
    .ver 2:0:0:0 
} 

Immer bevorzugen Assembly.LoadFrom().

+0

Ich lief ildasm.exe und ich habe das gleiche Ergebnis, das Sie zeigen. Bedeutet das, dass ich keine 2.0 Assemblies in meinem Plugin referenzieren kann? – scott

+0

Wow, punkte eins für psychisches Debugging. Erstellen Sie die abhängigen Assemblies ebenfalls neu. Oder benutze LoadFrom(). –

Verwandte Themen