Frage

Ich arbeite an einem c # CodeDOM Projekt der Benutzer dynamisch den c # Code kompilieren zu Verfügung stellt. Ich erhalte Fehler beim Zusammenbau dll von wpf Zugabe (es funktioniert gut für WinForms). Es sagt, dass „Can not #### in der Montage finden. Sind Sie einige Referenz fehlt“, wenn ich versuche, die Referenz wie „System.Windows.Media“ hinzuzufügen. Aber wenn ich die Referenz bin Hinzufügen von seinem DLL-Pfad wie „C: \ Programme \ Reference Assemblies \ Microsoft \ Framework \ v3.0 \ System.Printing.dll“ dann ist es zu sagen, dass „Datei C: \ Programme \ Referenz Assemblies \ Microsoft \ Framework \ v3.0 \ System.Printing.dll nicht gefunden“, aber wenn ich die System.Printing.dll der Anwendung ausführbaren Ordner platzieren, es funktioniert gut.

Im Anschluss ist der Code Ich bin mit dem Verweis auf die Compiler-Option hinzufügen:

CompilerParameters oParameters;
:
:
:
string lcAssemblyDll="C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\System.Printing.dll";
oParameters.ReferencedAssemblies.Add(lcAssemblyDll);

Ich bin nicht in der Lage, das Problem zu verstehen. Auch gibt es einen anderen Ansatz, um die wpf Baugruppen hinzufügen?

Danke

War es hilfreich?

Lösung

Nun, ich kann nicht eine gründliche Antwort aus der Spitze von meinem Kopf bieten, sondern vor allem müssen Sie erkennen, dass eine Kompilation Referenz ist nicht das gleiche wie in der Lage, eine Baugruppe während der Ausführung der Anwendung zu lösen. Also, wenn der Fehler bei der Anwendungsausführung gegeben wurde, kann ich es mir vorstelle typeloader Ausnahmen werfen.

Zweitens sind Sie wahrscheinlich immer „nicht gefunden #### in der Montage. Vermissen Sie einen Hinweis“, weil Basistypen von Klassen, die Sie abhängig sind residieren in Baugruppen, auf denen die System.Windows.Media bezieht.

Sie könnten versuchen, diese Zugabe Verweise auf Baugruppen zu lösen, die während Assembly.ReflectionOnlyLoad der Baugruppen geladen werden Sie bezeichnet werden soll. Wenn Sie einen Ereignishandler für AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve hinzufügen, können Sie Code hinzufügen, sicher, dass diese Baugruppen macht geladen werden kann und dann einfach Verweise auf die CodeCompileUnit hinzuzufügen.

Ich habe in ein Problem mit diesem laufen, obwohl, und das war, dass einige Referenzen während der Kompilierung optimiert weg, so dass ich ein gemeiner Hack implementiert, dass einfach eine Container-Klasse zum CodeCompileUnit fügt, die die erste konstruierbar Typ initializies in jeder von denen gefunden Baugruppen.

Ich hoffe, das hilft ein wenig.

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