【发布时间】:2016-01-29 17:04:57
【问题描述】:
我编写了一个 .NET 库,该库由第三方应用程序中的 VBA 宏调用。我使用了 Robert Giesecke 的 Unmanaged Exports,这部分工作正常(调用库 C# 代码,如果我附加到进程等,我可以在里面进行调试)。
当我需要使用其他库中定义的类型时,就会出现问题,例如,使用 Prism Mvvm 的 WPF GUI 需要 Microsoft.Practices.Prism.Mvvm 程序集。在这种情况下,.NET 会搜索程序集但找不到它。使用进程监视器、融合日志查看器进行故障排除,我发现对丢失程序集的搜索非常短,搜索程序集的唯一位置是应用程序根目录(例如在 C:\Program Files\AppName\ 中)。无需努力查看 dll 所在的目录以及依赖项所在的目录。我可以将所有依赖项复制到应用程序的根目录,但这不是一个好的情况(我不想弄乱另一个应用程序的私有空间)
我如何告诉 .NET 框架查看缺少程序集的 DLL 所在的目录?
【问题讨论】:
-
如果您不想使用 GAC,则必须使用 AppDomain.AssemblyResolve 事件。正确订阅它并没有那么快乐。请注意,您可能已经违反了“不能在私人空间中乱七八糟”的要求,也没有太多让本机代码找到您的主程序集的好方法。这是“一分钱,一磅”。
-
谢谢汉斯,你把我带到了正确的道路上,我查看了 appdomain.AssemblyResolve 并找到了这个答案:stackoverflow.com/a/1373295/1685379 这解决了我的问题,程序集被加载了。私有空间中的注入确实存在,但只能通过一个带有我的 dll 接口的 vba 宏,从另一个文件夹加载(它在用户空间中,所以不再是真正的私有空间)谢谢你的提示!跨度>