首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将两个托管x86/x64dll组合成一个托管AnyCpu库?

如何将两个托管x86/x64dll组合成一个托管AnyCpu库?
EN

Stack Overflow用户
提问于 2016-12-13 09:29:09
回答 1查看 1.1K关注 0票数 4

第三方编译非托管代码(x86/x64分隔)并为任何平台(x86/x64分隔)提供托管C# .NET dll:

  • FooManaged_x86.dll
  • FooManaged_x64.dll

这就是我所收到的东西(既不是本机代码,也不是非托管dll)。

然后,我可以创建一个C#.NET应用程序(或库)来访问x86或x64,并直接引用相应的托管dll --所有这些都很好,但仅限于一个特定的平台(不是我的目标)。

我的应用程序可以针对AnyCpu (我的目标),引用x64 dll (错误,编译器警告),并且只有当它作为x64实际运行时才能工作。同样,这是绑定到一个特定的平台。

我知道,我可以将非托管x86/x64 dll (与Fody.Costura)结合到一个托管dll中,方法是在运行时动态加载学徒dll(使用DllImport和手动dll)。我已经成功地做到了这一点,但是这个方法并不适合托管dll。我将不得不从托管PInvoke C#到托管C# dlls -这在我看来是不对的。

Q:有没有办法将两个托管x86/x64dll合并成一个托管AnyCpu dll而没有PInvoke?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-13 09:42:04

是的,有。我已经成功地使用LibZ将混合模式程序集打包为资源到托管AnyCPU程序集中。库为其运行的平台选择正确的程序集。

这是同一作者在lz4net中使用的技术。

在您的情况下,命令行是:

libz注入-dll-程序集YourAnyCpuLib.dll -包括FooManaged.x86.dll -包括FooManaged.x64.dll

请注意,AnyCPU程序集仍然必须引用一个依赖于平台的库,因此您将在构建时得到警告。只需选择用于测试/开发目的的一个。

另外,确保第三方许可证不会禁止您将程序集嵌入到您自己的程序集中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41117543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档