【问题标题】:How to distribute both 32 and 64 bit versions of the library如何分发 32 位和 64 位版本的库
【发布时间】:2012-03-17 04:31:30
【问题描述】:

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

最近我向 SQLite .NET 库添加了一个依赖项,该库有 32 位和 64 位两种版本(但不是 AnyCPU)。所以,现在,我必须有 2 个构建 - 两个位。

过去,我看到其他库(想到 MS SQL Compact)有一个方案,其中单个 .NET 程序集将在文件夹中包含 Private\amd64Private\x86 文件夹,其中包含适当的本机库它们,它会根据需要调用每一个。

这种方法适合我的情况吗?是否有关于如何实现它的文档?是否需要更改代码或者这是一种分发技术?

【问题讨论】:

    标签: c# .net .net-4.0 64-bit distribution


    【解决方案1】:

    您可以使用 System.Reflection.Assembly.Load 动态加载相应的程序集

    见: http://msdn.microsoft.com/en-us/library/system.reflection.assembly.aspx

    【讨论】:

      【解决方案2】:

      有几种方法可以解决这个问题。前三种方法需要更改代码(少量):

      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 和代码库元素来确定程序集位置。您的设置将根据平台安装正确的设置。

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

      D.编写两个设置,一个用于 32 位,一个用于 64 位,然后只安装适合平台的文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-09
        • 1970-01-01
        • 2021-07-08
        • 1970-01-01
        • 1970-01-01
        • 2010-12-03
        • 2020-10-28
        • 1970-01-01
        相关资源
        最近更新 更多