我们目前正在为某些软件开发插件。我们决定使用 .NET 进行开发,即使应用程序是用某种本地语言编写的。由于在 .NET 中直接创建外部接口存在一些问题,我们决定在 C++/CLI 中构建一个桥接 DLL,它会进行一些基本的初始化,然后加载我们的托管程序集并从中创建一个用户控件。
在加载项 .ini 文件中,C++/CLI DLL 按名称引用,因此应用程序将从那里加载它。但是,.NET DLL 只是从 C++/CLI DLL 引用(作为托管引用),因此导出的类型可用。然而,在此设置中,应用程序在加载 .NET DLL 时会崩溃。
我们很快发现我们可以只订阅AppDomain.AssemblyResolve
事件以从 C++/CLI DLL 所在的同一目录加载 .NET 程序集,因此问题本身就解决了。
实际的问题是:为什么加载程序找不到 .NET DLL,即使它与引用它的程序集位于同一目录中?我一直希望加载程序集会首先查看同一个目录,而不是仅仅查看当前工作目录。如果可执行文件更改其工作目录,为什么它会找到程序集?或者如果通过加载 C++/CLI 程序集(而不是纯托管应用程序)调用 CLR,情况会有所不同吗?