2012-10-03 8 views
5

tengo un montaje de WPF que yo uso en un escenario de interoperabilidad de código nativo utilizando el contexto LoadFrom carga así:WPF carga de recursos falla en el contexto de carga LoadFrom

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

Tenga en cuenta que mydlls no es la misma carpeta que donde se encuentra el ejecutable. Esto funciona bien para dlls regulares de .NET que no sean de UI que también cargo, pero cuando trato de hacerlo obtengo un error. Adjunté el controlador de eventos AppDomain.CurrentDomain.AssemblyResolve y obtuve un evento donde no se carga. El nombre en ResolveEventArgs es "mywpfstuff.resources" y RequestingAssembly está vacío. No tengo ningún archivo llamado "mywpfstuff.resources" y no pude encontrar la manera de resolver este problema.

La línea de código que activa el error es el InitializeComponent(); llamar a mi constructor principal de controles de usuario.

Me parece que el XAML interna mecanismos (BAML?) Intenta cargar algunos recursos, pero utiliza ese contexto de carga estándar en lugar del contexto LoadFrom.

¿Hay alguna forma de evitar este problema, preferentemente por conseguir WPF para utilizar el contexto LoadFrom o si eso no es posible cómo hacer el montaje de resolver de forma manual?

+0

¿Tiene un archivo con el nombre '' Resources.resx' en proyecto mywpfstuff' (probablemente en ' Carpeta de propiedades') Si es así, ¿qué 'Build Action' tiene? – SHSE

+0

No estoy seguro de que importe mucho; verá que muchos DLL han intentado cargarse al usar AssemblyResolve (en mi experiencia). ¿Tiene algo más que agregar sobre su proyecto? ¿Qué es 'myclass' exactamente? – NSGaga

+0

¿Ha intentado devolver el ensamblado mywpfstuff de su controlador de eventos cuando se solicita mywpfstuff.resources? – mgronber

Respuesta

0

tuve un problema similar en el pasado, debido a los problemas de localización y resx faltante.

Si el XAML utiliza los recursos de ese montaje, vuelva a comprobar que los recursos para la cultura de la interfaz de usuario son realmente disponible en la subcarpeta adecuada de c: \ mydlls.

0

tuve una situación similar cuando creé este Unused References – VS2010 Add-in – top to bottom.

El problema es que los recursos ya cargados, y no se puede recargar otros recursos.

Espero que esto ayude ...

que creó un método de inicio para ser visitada:

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(); 
    } 
} 
Cuestiones relacionadas