Por que eu recebo um erro com meu XmlSerializer?
-
08-07-2019 - |
Pergunta
Eu fiz um par de alterações no meu aplicativo de trabalho e começou a receber o seguinte erro nesta linha de código.
Dim Deserializer As New Serialization.XmlSerializer(GetType(Groups))
E aqui está o erro.
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.
O que está acontecendo?
Solução
A principal razão isso estava acontecendo foi porque eu tinha uma incompatibilidade entre os tipos que eu estava tentando Serialize e Deserialize. Eu estava Serializando ObservableCollection (do Grupo) e desserializar um objeto de negócios -. Grupos que herdaram ObservableCollection (do grupo)
E isso também foi parte do problema ... A partir de - http: // social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/9f0c169f-c45e-4898-b2c4-f72c816d4b55/
Esta exceção é uma parte da operação normal do XmlSerializer. isto é esperado e serão capturados e manipulados dentro do código de quadro. Simplesmente ignorá-lo e continuar. Se isso incomoda durante a depuração, defina o depurador Visual Studio apenas parada em exceções não tratadas em vez de tudo exceções.
Outras dicas
De acordo com a informação que eu encontrei, exceção BindingFailure associado com XmlSerializers às vezes não indica qualquer erro e deve ser simplesmente ignorada, mas às vezes você pode vê-lo i. e. no modo de depuração, quando tiver definido opções VS para mostrar todas as exceções lançadas.
Btw. isso é mais ou menos uma das coisas mencionadas na primeira resposta:).
Parece que você não pode localizar os FUSE.XmlSerializers montagem. Confira os resultados da Assembly Binding Log Viewer (Fuslogvw.exe) para ver onde ele está procurando (embora a lista apresentada acima parece bastante completo).
Tente localizar onde esta montagem é armazenado em seu computador e executar NGen nele para ver se ele não está a carga por algum motivo. Certifique-se este arquivo DLL está aparecendo em seu diretório Bin \ Debug . O Visual Studio não parecem ter as dependências das dependências, e então você tem que ter certeza de que todos os arquivos que você precisa-se às vezes.
Como você carregar o assembly que contém o tipo Groups
? Eu estou supondo que você carregado com Assembly.LoadFrom()
porque o serializador XML está usando o mesmo contexto (contexto, a 'LoadFrom') para tentar assembleias de carga para serialização. Se assim for, você tem um par de opções:
- Use
Assembly.Load()
vez deAssembly.LoadFrom()
. - Anexar um manipulador para
AppDomain.AssemblyResolve
para ajudar o CLR encontrar o conjunto em causa.
Para os poucos projetos do Visual Studio que eu tenho, onde este é um aborrecimento, prefiro desativar pausa na exceção apenas para o BindingFailure e System.IO.FileNotFoundException .
No Visual Studio: Ctrl + D , Ctrl + E para o diálogo de Exceções:
1) Uncheck BindingFailure sob
2) Desmarque System.IO.FileNotFoundException em Exceções Common Language Runtime .
Ahhh que é melhor: -)
... e vejo 1/2 esta resposta foi dada por strager 24 de novembro '10 em 10:12