如何分发32位和64位库的版本

11

我有一个C#库,被各种32位和64位客户端调用。到目前为止,它被编译为AnyCPU,因此没有问题。

最近我添加了对SQLite .NET库的依赖,该库有32位和64位版本(但没有AnyCPU版本)。所以现在,我必须有两个构建 - 适用于两种不同的位数。

过去,我看到其他库(比如MS SQL Compact)采用一种方案,即单个.NET程序集将在文件夹中拥有Private\amd64Private\x86文件夹,并且其中包含相应的本地库,并根据需要调用每个库。

这种方法对我的情况可行吗?是否有实施此方案的文档?是否需要进行代码更改或者这是一种分发技术?

2个回答

6
有几种方法可以处理这个问题。前三种方法需要进行代码更改(小)。:
A.您可以在应用程序启动期间修改路径以指向特定于平台的文件夹。然后,.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.config和codebase元素来确定程序集位置。根据平台安装正确的设置。

http://msdn.microsoft.com/en-us/library/4191fzwb.aspx

D. 编写两个安装程序,一个针对32位系统,另一个针对64位系统,然后只安装适用于该平台的文件。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接