2

3つのプロジェクトがあります-SilverlightアプリAと2つのSilverlightクラスライブラリB、C。私のシリアル化ロジックは、プロジェクトCのメソッドCallSer()にあります。BのルーチンがCallSer()を呼び出す場合、すべてが正常に機能します。ただし、CのルーチンがCallSer()を呼び出すと、以下のエラーが発生します。Copy Localプロパティを設定しようとしましたが、役に立ちません(Copy Local = Trueの場合、アセンブリがデバッグフォルダーにコピーされるのがわかります)。これは驚くべきことのようです、これを解決する方法について誰かがアイデアを持っていますか?ありがとう。

{System.IO.FileNotFoundException:ファイルまたはアセンブリ'System.Xml、Version = 5.0.5.0、Culture = neutral、PublicKeyToken=7cec85d7bea7798e'またはその依存関係の1つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。ファイル名:'System.Xml、Version = 5.0.5.0、Culture = neutral、PublicKeyToken = 7cec85d7bea7798e'}

更新:もう少し分析を行ったところ、CallSer()の呼び出しは実際には別の.NETクラスライブラリDからのものであることがわかりました。したがって、コールスタックはD-> C-> CallSer()を示しています。Cを参照している限り、これによってどのような違いが生じるかSystem.Xml.Serializationわかりません。また、System.Xml.SerializationDの[参照の追加]オプションにリストされていませんか?どうしてこんなことに?

更新:XmlSerializerがどの参照をロードするかについて混乱しているようです。これは、SilverlightのXmlSerializerがSystem.Xml.Serialization.dllアセンブリ内に定義されており、.NETFrameworkのSystem.Xml.dll内にあるためです。私のプロジェクトDにはSystem.Xmlへの参照があり、CにはSystem.XmlとSystem.Xml.Serializationがあります。Cが常にSilverlightバージョンのdllを参照していることを確認するにはどうすればよいですか?

4

2 に答える 2

2

単体テストを実行しようとして同じ問題に遭遇しました。問題は、Silverlight クラス ライブラリを呼び出しているコードが「デスクトップ」.Net Framework に対してビルドされている場合、.Net Framework を読み込めないため、競合が発生することです。 dll の Silverlight バージョン。Silverlight ランタイムのみが、Silverlight CLR/BCL に対してビルドされた dll をロードできます。

ポータブル クラス ライブラリポータブル ライブラリ ツールの作成をご覧ください。

于 2012-04-28T11:04:29.843 に答える