【发布时间】:2011-04-28 13:57:22
【问题描述】:
我想为一个软件编写一个插件,它将普通的 32 位 DLL 作为插件加载。
因为我在 C# 方面的经验要好得多,所以我计划使用 C++/CLI 程序集作为 包装器,然后将函数调用委托给“真正的”C# 插件。
但是我有一个问题。我测试了 C++/CLI DLL 是否正确加载。 现在我添加了 C# 程序集作为对 C++/CLI DLL 的引用。问题是,当我在同一目录中有 C# DLL 时,软件想直接将其作为插件加载,软件崩溃。如果我将 C# DLL 放在子目录中,C++/CLI DLL 将无法找到它。
我尝试了在网上找到的不同解决方案,让 C++/CLI 程序集在子目录中找到 C# 程序集,但它们都不起作用:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="DLL" />
</assemblyBinding>
</runtime>
没有用。创建 C++/CLI DLL 时似乎忽略了 app.config。
将AppDomain.CurrentDomain.AppendPrivatePath("DLL"); 添加为程序集中的第一个命令不起作用,因为 DLL 仅具有直接函数调用,并且没有像真正的“入口点”这样的东西。
我发现的另一件事是将方法Assembly currentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 放在DLL 中。但是我无法让编译器识别 Assembly 关键字,尽管我使用了using namespace System::Reflection;。
因此,如果有人知道如何使其正常工作,我将不胜感激。
【问题讨论】: