[英]How to distribute both 32 and 64 bit versions of the library
我有一個C#庫,由各種客戶端(32位和64位)調用。 到目前為止它被編譯為AnyCPU,所以沒有問題。
最近我添加了一個依賴於SQLite .NET庫,它有32位和64位版本(但不是AnyCPU)。 所以,現在,我必須有兩個版本 - 兩個比特。
在過去,我已經看到其他庫(MS SQL Compact想到)有一個方案,其中單個.NET程序集將在文件夾中具有Private\\amd64
和Private\\x86
文件夾,其中包含相應的本機庫,並且會根據需要打電話給每個人。
這種方法對我的情況是否可行? 是否有關於如何實施它的文檔? 是否需要更改代碼或這是一種分發技術?
有幾種方法可以解決這個問題。 前三種方法需要代碼更改(小):
答:您可以在應用程序啟動期間修改PATH以指向特定於平台的文件夾。 然后.NET將自動從該文件夾加載本地DLL。
B.您可以訂閱AssemblyResolve事件,然后根據平台選擇程序集。
查看Scott Bilias的博客文章http://scottbilas.com/blog/automatically-choose-32-or-64-bit-mixed-mode-dlls/ 。 請注意,他最終更喜歡方法A.
“簡而言之,解決方案是欺騙加載器!引用不存在的p4dn.dll,並使用AssemblyResolve事件攔截加載並將其重新路由到正確的位大小組件。”
C.使用特定於平台的exe.configs集和codebase元素來確定程序集位置。 您的設置將根據平台安裝正確的安裝程序。
http://msdn.microsoft.com/en-us/library/4191fzwb.aspx
D.編寫兩個設置,一個用於32位,一個用於64位,然后只安裝適用於該平台的文件。
您可以使用System.Reflection.Assembly.Load動態加載相應的程序集
請參閱: http : //msdn.microsoft.com/en-us/library/system.reflection.assembly.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.