2012-07-18 47 views
0

有沒有辦法使用強命名的程序集來代替非命名的程序集?強烈命名的程序集代替非命名的程序集

真正的問題是這樣的:

我創建一個庫(如:SqliteOrm.dll)(便攜式類庫在我的實例,通過這個問題是與任何類型)引用另一個庫(例如:系統.Data.dll),這取決於平臺(iOS,Android,WP,桌面和WinRT)。這個庫(SqliteOrm.dll)然後被來自每個平臺的應用程序使用,但會切換System.Data.dll。

但是,System.Data.dll在GAC中以強名稱存在。這將導致當庫被消耗異常:

System.IO.FileNotFoundException: 
Could not load file or assembly 'System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. 
The system cannot find the file specified. 

的原因,我這樣做是因爲System.Data.dll中不存在WP但不會在M4A。我在M4A上使用本機System.Data.dll,但在WP上使用我自己的版本。我的版本只包含必要的類型,所以它在這種方式上有所不同。

我目前正在使用地鐵和桌面應用程序進行測試,這是發生異常的地方。我隱約想起了一些事實,即M4A運行時並未實際執行檢查,但我希望我的庫也能在桌面上工作。

有沒有人對我有任何提示,或者這是一個不好的做法?

+0

沒有強名的System.Data來自哪裏?另外:哪些平臺在這裏有問題?如果它只是桌面,正在處理AppDomain.AssemblyResolve一個選項? *個人*(基於我自己的多平臺庫經驗),我懷疑你會發現擁有每個平臺的構建更容易,只需引用相應的dll。通過NuGet部署,這也很容易實現自動化。 – 2012-07-18 19:53:23

回答

0

考慮在任何地方使用自己的System.Data。可能比別的痛苦少很多。

這裏有一些建議的替代方法:http://www.simple-talk.com/blogs/2007/08/30/strong-naming-remoting-nothg-but-ye-liveliest-awfulness/

然後就是瘋狂的方式:它的實際工作來設置你的組件由MS-鍵被延遲簽名,然後註冊組件的延遲在安裝時簽署的程序集(在WP上)。當然,現在你需要管理員權限來安裝,並且可以讓任何希望WP上更加健全的System.Data的人感到困惑。

相關問題