it-swarm.dev

Proč jsem dostal chybu s mým XmlSerializer?

Udělal jsem pár změn v mé pracovní aplikaci a začal jsem dostávat následující chyby v tomto řádku kódu.

Dim Deserializer As New Serialization.XmlSerializer(GetType(Groups))

A tady je chyba.

    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.

Co se děje?

42
Doug

Hlavním důvodem, proč se to dělo, bylo to, že jsem měl nesoulad v typech, které jsem se snažil Serializovat a Deserializovat. Byl jsem Serializing ObservableCollection (skupiny) a deserializing business object - Skupiny, které zdědily ObservableCollection (skupiny).

A to bylo také součástí problému ... Z - http://social.msdn.Microsoft.com/Forums/en-US/asmxandxml/thread/9f0c169f-c45e-4898-b2c4- f72c816d4b55/

Tato výjimka je součástí normální operace XmlSerializer. Očekává se, že bude Zachycen a Bude zpracován uvnitř kódu Framework. Stačí jej ignorovat a pokračovat. Pokud vás Obtěžuje během ladění, nastavte ladicí program Visual Studio, aby se zastavil pouze na Neošetřených výjimkách namísto všech výjimek .

68
Doug

Podle informací, které jsem našel, výjimka BindingFailure spojená s XmlSerializers někdy neindikuje žádnou chybu a měla by být ignorována, ale někdy ji můžete vidět i. E. v režimu ladění, když jste nastavili možnosti VS, aby se zobrazovaly všechny výjimky.

Zdroj: https://connect.Microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=88566&wa=wsignin1.0

Mimochodem. to je víceméně jedna z věcí zmíněných v první odpovědi :).

8
Lukasz M

Zdá se, že nelze najít Fuse.XmlSerializers sestavení. Zkontrolujte výsledky Prohlížeče vazby Sestavení vazby (Fuslogvw.exe) a zjistěte, kde se dívá (ačkoliv výše uvedený seznam se jeví jako úplný).

Pokuste se najít, kde je toto shromáždění uloženo na vašem počítači a spusťte NGen na něm, abyste zjistili, zda se z nějakého důvodu nenačte. Ujistěte se, že se tento soubor DLL zobrazuje v adresáři Bin Debug. Zdá se, že Visual Studio nezíská závislosti závislostí, a proto se musíte ujistit, že máte někdy všechny soubory, které potřebujete.

1
Brody

Jak jste načetli sestavu obsahující typ Groups? Hádám, že jste ji načetli s Assembly.LoadFrom(), protože serializátor XML používá stejný kontext (kontext 'LoadFrom'), aby se pokusil načíst sestavy pro serializaci. Pokud ano, máte několik možností:

  1. Použijte Assembly.Load() namísto Assembly.LoadFrom().
  2. Připojte obslužný program k AppDomain.AssemblyResolve, abyste pomohli CLR najít dané shromáždění.
0
Kent Boogaart

Pro vaše webové stránky Visual Studio-Projekte, bei denen dies ärgerlich is, ziehe ich es vor, die Unterbrechung bei Ausnahme nur für BindingFailure und System.IO.FileNotFoundException zu deaktivieren.

V aplikaci Visual Studio:Ctl+D,Ctl+Efür den Ausnahmedialog:

1) Deaktivieren Sie BindingFailure unter Managed Debugging Assistants

2) Deaktivieren Sie System.IO.FileNotFoundException unter Common Language Runtime Exception.

Ahhh das ist besser :-)

... und ich sehe 1/2 Diese Antwort wurde von Strager 24. listopadu 10 um 10:12 Uhr gegeben

0
ScottWelker