根据平台加载x64或x86 DLL?

Amm*_*ark 17 .net c#

我有一个构建为"任何CPU"的应用程序,并且有两个针对x86和x64的同一个库的第三方Dll.我希望在运行时包含其中一个库,具体取决于它将在客户端计算机上运行的平台.最好的方法是什么?

Dav*_*nan 21

如果我们讨论的是非托管DLL,请声明p/invokes:

[DllImport("DllName.dll")]
static extern foo();
Run Code Online (Sandbox Code Playgroud)

请注意,我们没有指定DLL的路径,只是它的名称,我认为它对于32位和64位版本都是相同的.

然后,在调用任何p/invokes之前,将库加载到您的进程中.通过p /调用LoadLibraryAPI函数来做到这一点.此时,您将确定您的进程是32位还是64位,并相应地构建DLL的完整路径.完整的路径是你传递给我的LoadLibrary.

现在,当您调用库的p/invokes时,它们将由刚刚加载的模块解析.

对于托管程序集,您可以使用它Assembly.LoadFile来指定程序集的路径.这可能是一个有点棘手的编排,但这篇优秀的文章向您展示了如何:自动选择32位或64位混合模式DLL.有很多与混合模式和本机DLL依赖关系相关的细节可能与您无关.关键是AppDomain.CurrentDomain.AssemblyResolve事件处理程序.