2012-10-03 9 views
5

Ich habe eine WPF-Assembly, die ich von nativen Code in einem Interop-Szenario verwenden Sie die Loadfrom Laden Kontext wie folgt aus:WPF Laden von Ressourcen nicht in Loadfrom Laden Kontext

AppDomain.CreateInstanceFrom("c:\mydlls\mywpfstuff.dll", "myclass") 

Beachten Sie, dass nicht die gleichen Ordner MyDlls ist als wo sich die ausführbare Datei befindet Das funktioniert gut für normale .NET-DLLs, die ich auch lade, aber wenn ich das versuche, bekomme ich einen Fehler. Ich habe den Ereignishandler AppDomain.CurrentDomain.AssemblyResolve angefügt und ein Ereignis erhalten, bei dem das Laden fehlschlägt. Der Name in dem ResolveEventArgs ist "mywpfstuff.resources" und das RequesingAssembly ist leer. Ich habe keine Datei mit dem Namen "mywpfstuff.resources" und konnte nicht herausfinden, wie ich diese Baugruppe selbst auflösen kann.

Die Codezeile, die den Fehler auslöst, ist die InitializeComponent(); rufe meinen Hauptkonstruktor für Benutzersteuerelemente auf.

Es scheint mir, dass die interne XAML (BAML?) Mechanismen versucht, einige Ressourcen zu laden, verwendet aber das Standard-Load-Kontext statt des Loadfrom-Kontext.

Gibt es eine Möglichkeit, um dieses Problem, vorzugsweise indem man WPF den Loadfrom Kontext zu verwenden, oder wenn das nicht möglich ist, wie die Montage von Hand lösen zu tun?

+0

Haben Sie eine Datei mit dem Namen '' Resources.resx' in mywpfstuff' Projekt (wahrscheinlich in ' Eigenschaftenordner) Wenn ja, was "Build Action" hat es? – SHSE

+0

Ich bin mir nicht sicher, dass das wichtig ist - Sie werden sehen, viele DLL-s versucht, bei der Verwendung von AssemblyResolve (nach meiner Erfahrung) geladen werden. Haben Sie noch etwas zu Ihrem Projekt hinzuzufügen? Was genau ist "Myclass"? – NSGaga

+0

Haben Sie versucht, mywpfstuff Assembly von Ihrem Event-Handler zurückzugeben, wenn die mywpfstuff.resources angefordert wird? – mgronber

Antwort

0

Ich hatte ähnliches Problem in der Vergangenheit aufgrund Lokalisierungsprobleme und fehlender resx.

Wenn die XAML verwenden Ressourcen aus dieser Assembly, überprüfen Sie, dass die Mittel für die Kultur der Benutzeroberfläche im richtigen Unterordner tatsächlich zur Verfügung stehen von c: \ MyDlls.

0

Ich hatte ein ähnliches Szenario, wenn ich diese Unused References – VS2010 Add-in – top to bottom erstellt.

Das Problem ist, dass die Ressourcen bereits geladen, und Sie können weitere Ressourcen nicht neu laden.

Hope this helps ...

Ich habe eine Start-Methode zugegriffen werden:

public static void Start() 
{ 
    if (Application.Current == null) 
    { 
     // create the Application object 
     App a = new App(); 
     var l = a.Resources["Locator"] as Locator; 
     // do something with l 
     a.Run(); 
    } 
    else 
    { 
     var locator = new Locator(); 
     // do something with l 
     Application.Current.Resources.Remove("Locator"); 
     Application.Current.Resources.Add("Locator", locator); 
     MainWindow main = new MainWindow(); 
     main.Show(); 
    } 
}