将C#DLL加载到C ++ / CLI – dependencies目录

我写了一个dll c ++ / cli库,它使用我的其他c#dll库。 当我在调用它的应用程序所在的文件夹中有c#dll时,C ++ / cli库工作正常。 该库最终将加载到许多应用程序中,并且不得将C#dll复制到带有应用程序的目录中。 它必须与c ++ / cli库位于同一个文件夹中,但在这种情况下,我有System.IO.FileNotFoundException。 我的建议是手动加载c#库或更改f.ex的路径。 firefox正在寻找依赖项,但我尝试使用LoadLibrary()和Assembly :: LoadFrom()方法来强制从正确的目录加载。 当然,我将带有dll的目录路径添加到系统PATH。 我在VS2010上工作。

您不会更改应用程序将查找dll的默认目录。

在设计时将你的dll放在一个众所周知的位置,即你要部署的位置。 添加对它的引用,确保它设置为Do not copy ever,否则它将最终在bin文件夹中。 你必须这样做,否则它将无法编译。

部署时,您需要一个软件包来部署公共dll,每个应用程序需要一个。 小心你不创建自己的dll地狱版本,如果appA需要旧版本或新版本的常见dll,与AppB相比

将AppDomain.AssemblyResolve事件添加到main(对于Windows应用程序)。 在运行时,当您在dll中引用类型时,事件处理程序将被触发,并且尚未加载程序集。

在那里你从众所周知的位置加载它。 通常在配置中,或在相对路径中。

Eg AllMyApps CommonDLLS MyFirstApp 

因此,加载所需公共dll的路径将是“.. \ CommonDlls \ MyCommondll.dll”。

NB你会想以某种方式保护dll,否则一个坏人可能会将他们的版本注入你的应用程序,这将是不好的…

您也可以使用此机制从远程服务器或数据库blob获取dll。

最简单的情况只是几行代码,只是查看事件。 花了大约15分钟让我在类似的情况下进行此操作。

不是在这台机器上,否则我已经粘贴在代码中。