我已经找了好几天了,但我发现的只是如何使用 P/Invoke 从 C# 调用非托管库。我需要以不同的方式做:我希望使用 P/Invoke 从另一个调用托管程序集(或使用其他东西,避免调用Assembly.Load
,Assembly.LoadFrom
等),主要是由于 CoreRT/NativeAOT 限制(参见此处) .
基本上,使用 CoreRT/NativeAOT 的想法是由于原生可执行文件的生成,这将提高我的应用程序的安全性,因为常见的反编译器无法使用它(除了 IDA 和具有 ASM 知识的聪明开发人员,但他们更难过来)。考虑到 CoreRT/NativeAOT 不能(它可以,但 .NET 团队现在不想......)使用任何 .NET 互操作方法(Assembly.Load
、Assembly.LoadFrom
等)加载外部程序集,但它可以使用DllImport
,我'想调用一个外部程序集,如果不使用任何这些程序集加载方法,它是否被反编译,我并不在意。
是的,我知道我可以用 CoreRT 本身编写一个包装器或其他东西来生成一个本机库,并从应用程序中使用 P/Invoke 调用它,但是对于由于 而无法编译的实体框架Reflection.Emit
,这是不可能的。
这里的理想解决方案是知道如何在不使用 Assembly.Load/LoadFrom/LoadFromStream/etc 的情况下从另一个 C# 应用程序/程序集调用任何 .NET 程序集 (DLL)。使用其他方法,可以是 P/Invoke(可以吗?)或其他方法。