想象一下MainLibrary.dll
是dynamically loading other helper DLLs。这是我们的设计变更,为此我们需要通过注册AssemblyResolve
回调来引导过程。
当存在单个入口点时(例如:Main()
),这很容易做到,但在我们的例子中,MainLibrary.dll
有多个入口点。我们希望避免引入明确的Init()
调用,因为这会破坏现有的客户端库API(“您必须在调用DoSomeWork()之前调用Init()。” / p>
那么库有没有办法知道它何时被加载或即将被使用?这样我们就可以锁定它来执行我们的注册,在动态加载更改之前维护客户端库接口。
答案 0 :(得分:0)
汇编没有内置的方式来知道它何时被加载(与在加载时调用DllMain
的本机代码不同)。
如果无法加载默认加载规则,您需要重新组织代码以了解何时加载其他二进制文件。
廉价的方法是提供(甚至可以自动生成)一层接口/对象包装器实现,它们只需在调用实际API之前强制加载依赖项。