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

本文关键字:32位 64位 版本 | 更新日期: 2023-09-27 18:26:01

我有一个C#库,它由各种客户端(32位和64位)调用。到目前为止,它被编译为AnyCPU,所以没有任何问题。

最近,我添加了一个对SQLite.NET库的依赖,它有32位和64位两种风格(但不是AnyCPU)。所以,现在,我必须有两个构建——针对这两个比特。

在过去,我看到过其他库(脑海中浮现的是MS SQL Compact)有这样一种方案,即单个.NET程序集的文件夹中有Private'amd64Private'x86文件夹,其中有适当的本机库,并且它会根据需要调用每一个。

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

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

有几种方法可以处理此问题。前三种方法需要代码更改(小):

A。您可以在应用程序启动期间修改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.config和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