我正在使用 Visual Studio 2008 和 Compact Framework 3.5 开发 Windows CE 应用程序。
现在我想将所需的 dll 放在主 exe 文件的子文件夹中。那可能吗? This solution不适用于 Windows CE。
编辑:
我希望依赖项位于客户端设备上的子文件夹中。
目前我的文件夹结构如下所示(所有内容都在一个目录中)
-- folder\
------ main.exe
------ controls.dll
------ webservice.dll
------ businesslogig.dll
------ nlog.dll
我想要什么:
-- folder\
------ main.exe
------ lib\
--------- controls.dll
--------- webservice.dll
--------- businesslogic.dll
--------- nlog.dll
这可以通过 app.config 文件中的设置在桌面上实现:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="lib" />
</assemblyBinding>
</runtime>
最佳答案
紧凑框架不支持在app.config文件中设置探测路径。不过,您可以尝试以下几种方法作为解决方法。
我的第一个猜测是将子文件夹添加到系统加载程序的搜索路径中,尽管我不知道我是否曾实际尝试过将其用于托管程序集。要扩展加载程序路径,只需将您的路径作为另一个字符串添加到 [HKLM\Loader\SystemPath]
处的 MULTI_SZ 注册表项中。我也不确定这是否需要软重置才能让操作系统接受更改。广播 WM_SETTINGSCHANGE
也可能值得一试。
托管程序集的第二个选项是在出现时手动加载程序集 - 在使用目标中的任何类之前。调用 Assembly.LoadFrom
来加载它,此时 CLR 将能够加载它。
native DLL 的第二个选项是使用目标的完整路径在 DLL 上调用 P/Invoke。一旦被第一个 P/Invoke 加载,任何对 dll 名称的进一步调用(即使没有路径)都将正确解析,因为它将仅使用由 LoadLibrary
检索到的内部句柄。
关于c# - Compact Framework - 将依赖项 (dll) 放在子文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8891211/