ear*_*ess 7 .net unmanaged managed 32bit-64bit
我们有一个.NET库,它引用了我们的一个非托管dll,让我们说:
到目前为止,Unmanaged.dll只有32位,所以DotNet.dll标有32位CPU类型.
需要添加64位支持.如何组织dll?对于32位和64位版本,DotNet.dll的IL代码都是相同的.
在这种情况下,使用这些库的开发人员被迫生成2个应用程序:32位和64位.但在这种情况下,确切知道发生了什么.
这与选项1相同,但DotNet.dll具有AnyCPU的CPU类型.
我不喜欢这个,因为使用这些库的开发人员在重新分发他们的应用程序时不能很好地使他们的应用程序不会崩溃而不在他们的应用程序上设置CPU类型:
这使得选项1优于选项2.
DotNet.dll在运行时将确定它运行的位数,然后PInvoke正确的Unmanaged.dll.
我会选择选项 3,为 AnyCPU 编译托管程序集,并根据其架构命名非托管程序集。我认为做出这个决定有两个不同的考虑因素:
我认为 .NET 开发人员不会期望必须为每个体系结构引用单独的文件。我会使用 AnyCPU 以便拥有一个 dll。
如果您使用 AnyCPU 作为托管程序集,则只有一个 dll,因此这是一个有争议的问题。
对于非托管程序集,可能期望为不同体系结构编译的文件具有不同的命名。从技术角度来看,以不同的方式命名文件可以让您将两种架构的文件放在同一目录中;这意味着根据架构在运行时调用不同的文件,但这并不是一个巨大的负担。我会对文件进行不同的命名。
| 归档时间: |
|
| 查看次数: |
670 次 |
| 最近记录: |