web-dev-qa-db-ja.com

XmlSerializerでエラーが発生したのはなぜですか?

作業中のアプリケーションにいくつかの変更を加え、このコード行で次のエラーを取得し始めました。

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

そして、ここにエラーがあります。

    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.

どうしたの?

42
Doug

これが起こっていた主な理由は、シリアライズとデシリアライズしようとしているタイプに不一致があったためです。 (グループの)ObservableCollectionをシリアライズし、(グループの)ObservableCollectionを継承したビジネスオブジェクトであるグループをデシリアライズしていました。

そして、これも問題の一部でした... From- http://social.msdn.Microsoft.com/Forums/en-US/asmxandxml/thread/9f0c169f-c45e-4898-b2c4-f72c816d4b55/

この例外は、XmlSerializerの通常の操作の一部です。これは予想されており、フレームワークコード内でキャッチおよび処理されます。無視して続行してください。デバッグ中に気になる場合は、すべての例外ではなく未処理の例外でのみ停止するようにVisual Studioデバッガーを設定します。

68
Doug

私が見つけた情報によると、XmlSerializersに関連付けられたBindingFailure例外はエラーを示さない場合があり、単に無視する必要がありますが、時々それを見ることができます。 e。デバッグモードで、スローされたすべての例外を表示するようにVSオプションを設定した場合。

ソース: https://connect.Microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=88566&wa=wsignin1.

ところでこれは多かれ少なかれ、最初の回答で言及されたものの1つです:)。

8
Lukasz M

Assembly Fuse.XmlSerializersが見つからないようです。 Assembly Binding Log Viewer (Fuslogvw.exe)の結果を調べて、どこを見ているかを確認します(上記のリストはかなりいっぱいに見えます)。

このアセンブリがコンピューターのどこに保存されているかを見つけ、 NGen を実行して、何らかの理由でロードに失敗しているかどうかを確認します。このDLL=)ファイルがBin\Debugディレクトリに表示されていることを確認してください。VisualStudioは依存関係の依存関係。したがって、時々必要なファイルがすべて揃っていることを確認する必要があります。

1
Brody

Groups型を含むアセンブリをどのようにロードしましたか? XMLシリアライザーはシリアル化のためにアセンブリをロードしようとするために同じコンテキスト( 'LoadFrom'コンテキスト)を使用しているため、Assembly.LoadFrom()でロードしたと思います。その場合、いくつかのオプションがあります。

  1. Assembly.Load()の代わりにAssembly.LoadFrom()を使用します。
  2. ハンドラーをAppDomain.AssemblyResolveに接続して、CLRが問題のアセンブリを検出できるようにします。
0
Kent Boogaart

これが厄介な場所にあるいくつかのVisual Studioプロジェクトでは、BindingFailureSystem.IO.FileNotFoundExceptionのみの例外ブレークを無効にすることを好みます。

Visual Studioの場合: Ctl+D、 Ctl+E 例外ダイアログの場合:

1)Managed Debugging AssistantsのBindingFailureのチェックを外します

2)Common Language Runtime Exceptionsの下のSystem.IO.FileNotFoundExceptionのチェックを外します。

ああ、それは良いです:-)

...そしてこの答えは、ストージャーによって10年11月24日10時12分に与えられた1/2だと思います

0
ScottWelker