7

So einfach wie Titel wirklich. Ich habe eine Lösung von .Net 2-3.5 auf .Net 4 aktualisiert, es funktionierte gut, ich habe dann VS 2012 und damit .NET 4.5 installiert und ich bekomme jetzt eine ExecutionEngineException, wenn ich versuche, die CustomAttributes widerzuspiegeln eine dynamisch generierte DLL mit dem folgenden Code: wirdWarum erhalte ich ExecutionEngineException für .Net 4.0 Assembly.GetCustomAttributes nach der Installation von VS2012/.Net 4.5?

Assembly assembly = Assembly.LoadWithPartialName("DavesNamespace.Custom"); 
var attributes = assembly.GetCustomAttributes(typeof(ChecksumAttribute), true); 

ich bekomme die Ausnahme mit oder ohne den Typen angegeben für GetCustomAttributes, aber es ist nur an diesem Punkt, dass es die Ausnahme auslöst, die Montag erfolgreich geladen und ich kann eigentlich Sehen Sie sich die CustomAttributes-Auflistung an, wenn ich einen Haltepunkt einstecke.

Die ursprüngliche .Net 2-3.5-Version funktioniert immer noch seit der Installation von vs2012.

Jede Hilfe sehr geschätzt, ich habe ein paar Probleme gefunden von vs2012 endend mit ExecutionEngineExceptions suchen online, aber nichts mit einer Antwort. Das Problem kann gelöst werden, indem VS2012 und .Net 4.5 entfernt werden, aber da wir vorhaben, mit der Veröffentlichung auf VS2013 zu wechseln, ist das keine wirkliche Lösung.

EDIT: Haben Sie den Fehler bekam in einer Beispielanwendung auftreten, die genau dies tut, und die Ausnahme noch einmal ausgelöst, wenn die Anwendung erstellt wird Targeting 4.5

-Stack-Trace in den Kommentaren hinzugefügt (es ist null)

+1

Können Sie die Ausnahme und Stacktrace buchen? – jessehouwing

+4

@mckjerral Ich bin vom .NET Framework-Kompatibilitätsteam. Ich möchte mir dieses Thema ansehen. Könnten Sie mich unter netfx45compat bei Microsoft dot com kontaktieren? Wenn Sie Code haben, um das Problem zu reproduzieren, wäre das auch großartig. Danke, Varun – Varun

+0

@jessehouwing '{" Ausnahme des Typs 'System.ExecutionEngineException' wurde ausgelöst. "} HRESULT -2146233082 StackTrace null' Nicht viel Hilfe dabei! – mckjerral

Antwort

1

Ich habe das Problem für unsere besondere Situation gelöst, obwohl ich denke, die Wurzel ist eine undokumentierte Änderung in wie .Net 4.5 liest CustomAttributes auf DLLs.

Die Lösung wurde eine CustomAttributeBuilder bewegt, bevor AssemblyBuilder.Save() davon, dass das letzte, was gesetzt wird [Nach der gesamte Inhalt der Baugruppe aufgefüllt wurde] mit dem ersten thing after AppDomain.CurrentDomain.DefineDynamicAssembly() [Bevor Sie den Inhalt gefüllt wurde]

Der tatsächliche Code, in dem die Ausnahme ausgelöst wurde, musste sich nicht ändern, obwohl ich den Ersatz für LoadWithPartialName() umgestaltet habe, was nur Load(), ist. Diese Problemumgehung funktionierte jedoch immer noch mit LoadWithPartialName().

Es kann sein, dass das Hinzufügen eines benutzerdefinierten Attributs nach dem Inhalt der Assembly das benutzerdefinierte Attribut an der falschen Stelle platziert? Aber das Problem wird mit MS protokolliert, um sich zu informieren.

Verwandte Themen