2

私は3つのプロジェクトを持っています - SilverlightアプリAと2つのSilverlightクラスライブラリB、C。私のシリアル化ロジックは、プロジェクトC、メソッドCallSer()にあります。 BからのルーチンがCallSer()を呼び出すと、すべて正常に動作します。しかし、CのルーチンがCallSer()を呼び出すと、以下のエラーが返されます。私はコピーローカルプロパティを設定しようとしましたが、それは助けにはなりません(コピーローカル= Trueの場合、アセンブリがデバッグフォルダにコピーされています)。これは驚くべきことですが、どの人がこれを解決するかについてのアイデアはありますか?ありがとう。はsilverlightクラスライブラリでsystem.xmlを読み込めませんでした

{System.IO.FileNotFoundException:ファイルまたはアセンブリ をロードできませんでした 'System.Xmlの、バージョン= 5.0.5.0、文化=中立、 なPublicKeyToken = 7cec85d7bea7798e' またはその依存関係の1つ。 システムは、指定されたファイルを見つけることができません。ファイル名: 'System.Xmlの、 バージョン= 5.0.5.0、文化=中立、なPublicKeyToken = 7cec85d7bea7798e'}

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

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

+0

すべてのプロジェクトがSilverlight 5を正しく対象としているかどうかを確認します。参照の1つが間違っている必要があります。最も確実な方法は、3つのプロジェクトファイルをテキストとして開き、そこの参照を比較することですが、Visualから直接行うことができます。 – jv42

+0

私はファイルをチェックし、5.0を指しています。 v5.0 stech

+0

System.Xmlへの参照の1つが間違っている必要があります... – jv42

答えて

2

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

Portable Class Libraryの作成を見て、Portable Library Tool

0

私はXml.Writerと同じ問題を抱えていました。

私は、SilverlightプロジェクトとSilverlight以外のプロジェクトの間で、Visual Studioで 'Add as Link'を使用してソースコードファイルを共有して作業しました。 また別の名前空間を使用するには#ifdef SILVERLIGHTを使用しなければなりませんでした。

Lloyd's Portable Class Libraryのアプローチはより洗練されているようですが、試してみる時間がありませんでした。

関連する問題