【发布时间】:2017-04-28 07:17:57
【问题描述】:
第三方编译非托管代码(x86/x64 分离)并为任一平台(x86/x64 分离)提供托管 C# .NET dll:
- FooManaged_x86.dll
- FooManaged_x64.dll
这是我收到的(既不是本机代码,也不是非托管 dll)。
然后我可以创建一个以 x86 或 x64 为目标的 C#.NET 应用程序(或库)并直接引用相应的托管 dll - 一切正常,但仅限于一个特定平台(不是我的目标)。
我的应用程序可以以 AnyCpu(我的目标)为目标,引用 x64 dll(错误,编译器警告),并且只有在实际以 x64 运行时才能工作。同样,它绑定到一个特定的平台。
我知道,我可以通过在运行时动态加载适当的 dll(在后台使用 DllImport 和手动 AssemblyLoad)将 非托管 x86/x64 dll(使用 Fody.Costura)组合成一个托管 dll .我已经非常成功地做到了这一点,但是这种方法不太适合 managed dll。我必须从托管 C# PInvoke 到托管 C# dll - 这对我来说听起来不对。
问:有没有办法将两个托管的 x86/x64 dll 合并为一个托管的 AnyCpu dll 而无需 PInvoke?
【问题讨论】:
-
据我所知,引用 x86 将允许您编译的目标在 x86 和 x64 上运行。我什至认为它可以让您将项目编译到 AnyCpu 而不仅仅是 x86 - 但我不完全确定。
-
@gilmishal:没有经过测试,但是......对于很多事情,x86 是一个很好的默认值,同意。但是,我的第 3 方库适用于大型文件/数据集,因此 64 位提供了实际优势。