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,文化=中性 公鑰= 7cec85d7bea7798e' 或它的一個依賴。 系統找不到指定的文件。文件名:「的System.Xml, 版本= 5.0.5.0,文化=中性公鑰= 7cec85d7bea7798e」}

更新:我做了一些更多的分析,發現調用CallSer()實際上是從另一個.NET類庫D.所以調用堆棧顯示是D - > C - > CallSer()。我不確定這可以造成什麼區別,只要我有System.Xml.Serialization引用C.另外,我沒有看到System.Xml.Serialization列在添加引用選項爲D?爲什麼?

更新:看起來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.其中一個引用必須是錯誤的。最可靠的檢查方法是以文本形式打開三個項目文件並比較其中的引用,但是您應該可以直接從Visual中進行。 – jv42 2012-04-16 09:11:09

+0

我檢查了這些文件,它們指向5.0。 v5.0 stech 2012-04-16 10:44:12

+0

然後其中一個對System.Xml的引用必須是錯誤的... – jv42 2012-04-16 13:49:44

回答

2

我遇到了同樣的問題試圖運行單元測試來了,問題是,如果被調用的Silverlight類庫代碼對「桌面」 .Net框架構建,你會得到衝突,因爲它不會是能夠加載dll的Silverlight版本,只有Silverlight運行時才能加載針對Silverlight CLR/BCL構建的dll。

看看創建Portable Class LibraryPortable Library Tool

0

Xml.Writer有同樣的問題。

我通過在Visual Studio中使用'添加爲鏈接'在我的Silverlight項目和我的非Silverlight項目之間共享我的源代碼文件來解決此問題。 我也不得不使用#ifdef SILVERLIGHT有一個單獨的命名空間。

勞埃德的便攜式類庫的方法似乎更清潔,但我沒有時間去嘗試。