如何分发32位和64位版本的库
我有一个C#库,由各种客户端(32位和64位)调用。到目前为止,它被编译为AnyCPU,所以没有问题。如何分发32位和64位版本的库
最近,我添加了对SQLite .NET库的依赖关系,这个库有32位和64位版本(但不是AnyCPU)。所以,现在,我必须有两个版本 - 两个版本。
在过去,我见过其他库(MS SQL Compact浮现在脑海),其中有一个方案,其中一个.NET程序集将文件夹中的Private\amd64
和Private\x86
文件夹与其中适当的本机库和它将根据需要调用每一个。
这种方法对我的情况是否可行?有没有关于如何实现它的文档?是否需要更改代码或者这是一种分配技术?
有几种方法可以处理这个问题。前三种方法需要代码更改(小):
答:您可以在应用程序启动期间修改PATH以指向特定于平台的文件夹。然后,.NET将自动从该文件夹加载本地DLL。您可以订阅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