2011-01-28 11 views
6

Tengo una aplicación WPF, y me suscribo al evento AppDomain.AssemblyResolve (este evento se genera cada vez que el tiempo de ejecución no encuentra un ensamblado), y noto que recibe una llamada varias veces intentando para resolver MyAssembly.resources, donde MyAssembly es el ensamblado de ejecución actual. También solicitó lo mismo para una asamblea de biblioteca a la que hice referencia en MyAssembly (solicitó Library.resources).AssemblyResolve siempre se levantan, solicitando MyAssembly.resources

¿Es esto normal? ¿Cómo lo arreglo? Mi aplicación tiene un problema. No puede cargar algún control de usuario xaml ubicado en la biblioteca. ¿Esto está relacionado?

Respuesta

7

Agregue esta línea a su AssemblyInfo.cs y su sistema de resolución no recibirá más recursos.

[assembly: NeutralResourcesLanguageAttribute("en-US", UltimateResourceFallbackLocation.MainAssembly)] 

Aunque se trata de una solución temporal, se deben considerar cuidadosamente las aplicaciones de varios idiomas.

Más información:

1

nos encontramos con este mismo problema con un controlador AssemblyResolve evento. Curiosamente, solo vimos el problema en las máquinas con Windows XP. Nuestra aplicación está traducida a varios idiomas, por lo que dudamos en usar el NeutralResourcesLanguageAttribute. Nuestra solicitud fue compilado para la versión 3.5 de .NET, pero seguía siendo afectada por el cambio AssemblyResolvedocumented para .NET v4.0:

Importante Comenzando con .NET Framework 4, se provoca el evento ResolveEventHandler para todos los ensamblados, incluidos conjuntos de recursos. En versiones anteriores, el evento no se planteaba para conjuntos de recursos . Si el sistema operativo está localizado, el manejador se puede llamar varias veces: una vez para cada cultivo en la cadena alternativa.

La forma en que esto fue resuelto para comprobar e.Name y ver si estaba buscando * .Resources.dll. Si ese archivo no se encontraba en el AppDomain o en la carpeta conocida, eliminaríamos ".Resources" y buscaríamos * .dll. Si ese archivo existe, cargamos y devolvemos ese ensamblaje. Esto resolvió el problema para nosotros.

Cuestiones relacionadas