¿Por qué recibí un error con mi XmlSerializer?
-
08-07-2019 - |
Pregunta
Hice un par de cambios en mi aplicación de trabajo y comencé a recibir el siguiente error en esta línea de código.
Dim Deserializer As New Serialization.XmlSerializer(GetType(Groups))
Y aquí está el error.
BindingFailure was detected
Message: The assembly with display name 'FUSE.XmlSerializers' failed to load in the 'LoadFrom' binding context of the AppDomain with ID 1. The cause of the failure was: System.IO.FileNotFoundException: Could not load file or assembly 'FUSE.XmlSerializers, Version=8.11.16.1, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
File name: 'FUSE.XmlSerializers, Version=8.11.16.1, Culture=neutral, PublicKeyToken=null'
Message: The assembly with display name 'FUSE.XmlSerializers' failed to load in the 'LoadFrom' binding context of the AppDomain with ID 1. The cause of the failure was: System.IO.FileNotFoundException: Could not load file or assembly 'FUSE.XmlSerializers, Version=8.11.16.1, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
File name: 'FUSE.XmlSerializers, Version=8.11.16.1, Culture=neutral, PublicKeyToken=null'
=== Pre-bind state information ===
LOG: User = DOUG-VM\Doug
LOG: DisplayName = FUSE.XmlSerializers, Version=8.11.16.1, Culture=neutral, PublicKeyToken=null, processorArchitecture=MSIL
(Fully-specified)
LOG: Appbase = file:///E:/Laptop/Core Data/Data/Programming/Windows/DotNet/Work Projects/NOP/Official Apps/FUSE WPF/Fuse/bin/Debug/
LOG: Initial PrivatePath = NULL
Calling assembly : System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: E:\Laptop\Core Data\Data\Programming\Windows\DotNet\Work Projects\NOP\Official Apps\FUSE WPF\Fuse\bin\Debug\FUSE.vshost.exe.config
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///E:/Laptop/Core Data/Data/Programming/Windows/DotNet/Work Projects/NOP/Official Apps/FUSE WPF/Fuse/bin/Debug/FUSE.XmlSerializers.DLL.
LOG: Attempting download of new URL file:///E:/Laptop/Core Data/Data/Programming/Windows/DotNet/Work Projects/NOP/Official Apps/FUSE WPF/Fuse/bin/Debug/FUSE.XmlSerializers/FUSE.XmlSerializers.DLL.
LOG: Attempting download of new URL file:///E:/Laptop/Core Data/Data/Programming/Windows/DotNet/Work Projects/NOP/Official Apps/FUSE WPF/Fuse/bin/Debug/FUSE.XmlSerializers.EXE.
LOG: Attempting download of new URL file:///E:/Laptop/Core Data/Data/Programming/Windows/DotNet/Work Projects/NOP/Official Apps/FUSE WPF/Fuse/bin/Debug/FUSE.XmlSerializers/FUSE.XmlSerializers.EXE.
¿Qué está pasando?
Solución
La razón principal por la que esto sucedía fue porque tenía una falta de coincidencia en los tipos que intentaba serializar y deserializar. Estaba serializando ObservableCollection (del grupo) y deserializando un objeto comercial: grupos que heredaron ObservableCollection (del grupo).
Y esto también fue parte del problema ... De - http: // social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/9f0c169f-c45e-4898-b2c4-f72c816d4b55/
Esta excepción es parte de la Operación normal de XmlSerializer. Eso se espera y será atrapado y manejado dentro del código Framework. Solo ignóralo y continúa. Si se te molesta durante la depuración, configura el El depurador de Visual Studio solo se detendrá excepciones no manejadas en lugar de todas excepciones.
Otros consejos
Según la información que encontré, la excepción BindingFailure asociada con XmlSerializers a veces no indica ningún error y debe ignorarse, pero a veces puede verla i. mi. en modo de depuración, cuando ha configurado las opciones de VS para mostrar todas las excepciones lanzadas.
Por cierto. Esta es más o menos una de las cosas mencionadas en la primera respuesta :).
Parece que no puede ubicar el ensamblado FUSE.XmlSerializers. Compruebe los resultados del Visor de registro de enlace de ensamblaje (Fuslogvw.exe) para ver dónde está mirando (aunque la lista presentada anteriormente parece bastante completa).
Intente ubicar dónde se almacena este ensamblado en su computadora y ejecute NGen en él ver si no se puede cargar por alguna razón. Asegúrese de que este archivo DLL aparezca en su directorio Bin \ Debug . Visual Studio no parece obtener las dependencias de las dependencias, por lo que debe asegurarse de tener todos los archivos que necesita a veces.
¿Cómo cargó el ensamblaje que contiene el tipo Grupos
? Supongo que lo cargó con Assembly.LoadFrom ()
porque el serializador XML está utilizando el mismo contexto (el contexto 'LoadFrom') para intentar cargar ensamblajes para la serialización. Si es así, tiene un par de opciones:
- Use
Assembly.Load ()
en lugar deAssembly.LoadFrom ()
. - Adjunte un controlador a
AppDomain.AssemblyResolve
para ayudar al CLR a encontrar el ensamblado en cuestión.
Para los pocos proyectos seleccionados de Visual Studio que tengo donde esto es una molestia, prefiero deshabilitar la pausa de excepción solo para BindingFailure y System.IO.FileNotFoundException .
En Visual Studio: Ctl + D , Ctl + E para el diálogo de Excepciones:
1) Desmarque BindingFailure en Asistentes de depuración administrados
2) Desmarque System.IO.FileNotFoundException en Excepciones de Common Language Runtime .
Ahhh eso es mejor :-)
... y veo 1/2 esta respuesta fue dada por el extraño 24 de noviembre de 10 a las 10:12