第三方编译非托管代码(x86/x64分隔)并为任何平台(x86/x64分隔)提供托管C# .NET 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?
发布于 2016-12-13 09:42:04
是的,有。我已经成功地使用LibZ将混合模式程序集打包为资源到托管AnyCPU程序集中。库为其运行的平台选择正确的程序集。
这是同一作者在lz4net中使用的技术。
在您的情况下,命令行是:
libz注入-dll-程序集YourAnyCpuLib.dll -包括FooManaged.x86.dll -包括FooManaged.x64.dll
请注意,AnyCPU程序集仍然必须引用一个依赖于平台的库,因此您将在构建时得到警告。只需选择用于测试/开发目的的一个。
另外,确保第三方许可证不会禁止您将程序集嵌入到您自己的程序集中。
https://stackoverflow.com/questions/41117543
复制相似问题