2012-10-03 9 views
5

Ho un gruppo di WPF che io uso in uno scenario di interoperabilità da codice nativo utilizzando il contesto LoadFrom carico in questo modo:WPF risorsa di carico non riesce nel contesto di caricamento LoadFrom

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

Nota che mydlls non è la stessa cartella dove si trova l'eseguibile. Funziona bene per le normali DLL non-ui .NET che carico anch'io, ma quando provo a fare ciò ottengo un errore. Ho allegato il gestore di eventi AppDomain.CurrentDomain.AssemblyResolve e un evento get in cui non riesce a caricare. Il nome in ResolveEventArgs è "mywpfstuff.resources" e RequestingAssembly è vuoto. Non ho un file chiamato "mywpfstuff.resources" e non sono riuscito a capire come fare questo assemblaggio risolvendo me stesso.

La riga di codice che attiva l'errore è InitializeComponent(); chiama il mio costruttore di controlli utente principale.

Mi sembra che i meccanismi interni XAML (BAML?) Provino a caricare alcune risorse, ma utilizza il contesto di caricamento standard anziché il contesto LoadFrom.

Esiste un modo per aggirare questo problema, preferibilmente facendo in modo che WPF utilizzi il contesto LoadFrom o se ciò non è possibile come risolvere manualmente l'assembly?

+0

Avete un file con nome 'Resources.resx' in' progetto mywpfstuff' (probabilmente in ' Cartella Proprietà')? Se è così, cosa significa "Build Action"? – SHSE

+0

Non sono sicuro che importi molto - vedrete che molti dll-s hanno provato ad essere caricati quando si usa AssemblyResolve (nella mia esperienza). Hai qualcos'altro da aggiungere sul tuo progetto: cos'è esattamente "myclass"? – NSGaga

+0

Hai provato a restituire l'assembly mywpfstuff dal gestore eventi quando viene richiesto mywpfstuff.resources? – mgronber

risposta

0

Ho avuto un problema simile in passato, a causa di problemi di localizzazione e resx mancante.

Se il XAML utilizza le risorse da quell'assemblea, controllare che le risorse per la cultura dell'interfaccia utente sono effettivamente disponibili nel corretta sottocartella di c: \ mydlls.

0

Avevo uno scenario simile quando ho creato questo Unused References – VS2010 Add-in – top to bottom.

Il problema è che le risorse sono già state caricate e non è possibile ricaricare altre risorse.

Spero che questo aiuti ...

ho creato un metodo Start per accedere:

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(); 
    } 
} 
Problemi correlati