簡體   English   中英

如何分發32位和64位版本的庫

[英]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\\amd64Private\\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM