2010-03-23 58 views
3

我有一個Logic Layer,它引用Silverlight的System.Xml.Linq dll和一個WPF中的GUI(因此, Silverlight System.Xml.Linq dll)。當我試圖從GUI項目中將XElement傳遞給Logic項目中的方法時,我得到(基本上)「XElement不是XElement類型」錯誤。更復雜的是,我無法編輯邏輯層項目。將Silverlight專用System.Xml.Linq dll與非Silverlight System.Xml.Linq混合使用dll

非Silverlight的DLL是: C:\ Program Files文件(x86)的\參考大會\微軟\框架\ v3.5版本\ System.Xml.Linq.dll

Silverlight的DLL是: C:\ Program Files(x86)\ Microsoft SDKs \ Silverlight \ v3.0 \ Libraries \ Client \ System.Xml.Linq.dll

我是C#的新手,但我確信我的問題是我我引用了不同的DLL來訪問System.Xml.Linq命名空間。我試圖用Silverlight的System.Xml.Linq.dll替換我的非Silverlight System.Xml.Linq.dll,但收到彙編錯誤。

有什麼辦法可以解決這個縮短我的WPF GUI項目和創建Silverlight項目的短小嗎?

回答

0

Silverlight和WPF使用根本不同的框架。它們不兼容。兩者之間的許多基本框架是相同的,但事實上並非如此。

如上所示,在不同項目中共享代碼可能是最佳解決方案,但要注意條件編譯。通常會導致很多複雜性。類似具有依賴注入的修飾器模式的方法可能更適合隱藏差異。

編輯:刪除了關於客戶端配置文件與Silverlight的一些錯誤信息。

+0

對本文最初版本中錯誤信息的道歉......我重複了一些我在播客上聽到的內容,然後我無法驗證。我編輯並更正了它。 – 2010-03-23 13:29:14

1

解決方案是有兩個版本你的邏輯項目。一個引用.NET 3.5庫,另一個引用Silverlight庫。兩個項目共享一組通用代碼文件。

因此,您將獲得WPF的構建和Silverlight的構建。如果您需要更改邏輯的代碼,您可以創建一次,然後重新生成將創建庫的兩個版本的解決方案。

默認情況下,Silverlight庫項目已經有了「SILVERLIGHT」的條件編譯符號。因此,在您的邏輯代碼可能需要處理.NET 3.5和Silverlight庫之間的差異的情況下,可以使用條件編譯來處理它們。

+0

感謝您的迴應。但是我在這一點上無法編輯引用silverlight dll的邏輯項目。 – programatique 2010-03-23 13:28:16

+0

@programatique:然後出現一個包含Creek和Paddle字樣的短語。 ;)如果你不能修改邏輯項目,那麼你可能最好先考慮一下,拋開WPF並改用Silverlight項目。 – AnthonyWJones 2010-03-23 13:54:35

+0

哈哈。是的 - 希望有一些簡單的方法。 – programatique 2010-03-23 20:35:31

0

您能否澄清「收到的裝配錯誤」?您可能能夠通過使用extern alias引用,但這是棘手和混亂。事後看來,也許將這種依賴關係放在API中是一個錯誤。或者:你可以重建目標框架的邏輯DLL嗎?