c# - Compact Framework - 将依赖项 (dll) 放在子文件夹中

标签 c# .net compact-framework

我正在使用 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/

相关文章:

c# - 在 .NET 中处理对象?

c# - 空异常检查字符串是否为空时出错?

c# - 在 WinCE 中将结构数组从 C++ 编码到 C#

c# - 在 Windows CE 5 上安装我的程序

unit-testing - NUnit(或 NUnitLite)和 .NET CF 的 "Getting started"问题

c# - Xamarin 中的跨平台 OpenGL 渲染

c# - 如何创建/编辑 list 文件?

c# - 在项目文件夹而不是 AppData 中存储应用程序设置

c# - 如何修复 "Target runtime doesn' t 支持覆盖中的协变类型?

c# - 在 app.config 中设置值 - 没有对程序文件的写入权限