gpt4 book ai didi

c# - 如何将两个托管 x86/x64 dll 组合成一个托管 AnyCpu 库?

转载 作者:行者123 更新时间:2023-11-30 15:59:47 26 4
gpt4 key购买 nike

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

  • FooManaged_x86.dll
  • FooManaged_x64.dll

这是我收到的(既不是 native 代码,也不是非托管 dll)。

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

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

我知道,我可以通过在运行时动态加载适当的 dll(在后台使用 DllImport 和手动 AssemblyLoad)将 unmanaged x86/x64 dll(与 Fody.Costura)组合成一个托管 dll .我在这方面取得了巨大成功,但这种方法不太适合托管 dll。我将不得不从托管 C# 调用 PInvoke 到托管 C# dll——这对我来说是错误的。

问:有没有办法在没有 PInvoke 的情况下将两个托管的 x86/x64 dll 组合成一个托管的 AnyCpu dll?

最佳答案

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

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

您的情况下的命令行是:

libz inject-dll --assembly YourAnyCpuLib.dll --include FooManaged.x86.dll --include FooManaged.x64.dll

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

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

关于c# - 如何将两个托管 x86/x64 dll 组合成一个托管 AnyCpu 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41117543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com