我写了一个 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 上工作。
问问题
1235 次
1 回答
1
您无需更改应用程序查找 dll 的默认目录。
在设计时将您的 dll 放在某个众所周知的位置,即您要部署到的位置。添加对它的引用,确保将其设置为永远不要复制,否则它将最终出现在 bin 文件夹中。你必须这样做,否则它不会编译。
部署时,您需要一个包来部署通用 dll,每个应用程序需要一个包。与 AppB 相比,如果 appA 需要较旧或新版本的通用 dll,请注意不要创建自己的 dll 地狱版本
将 AppDomain.AssemblyResolve 事件添加到 main(对于 windows 应用程序)。在运行时,当您在 dll 中引用类型并且程序集尚未加载时,事件处理程序将被触发。
在那里,您从众所周知的位置加载它。这通常在配置中,或者在相对路径中。
E.g.
AllMyApps
CommonDLLS
MyFirstApp
因此,您从中加载所需的通用 dll 的路径将是“..\CommonDlls\MyCommonll.dll”。
注意,您将希望以某种方式保护 dll,否则坏人可能能够将他们的版本注入您的应用程序,这将是不好的......
您也可以使用此机制从远程服务器或数据库 blob 获取 dll。
最简单的情况就是几行代码,查一下事件就行了。在类似的情况下,我花了大约 15 分钟来完成这项工作。
虽然不在这台机器上,否则我会粘贴代码。
于 2013-07-25T20:23:36.507 回答