C# Compact Framework—将依赖项(DLL)放置在子文件夹中
我正在使用Visual Studio 2008和Compact Framework 3.5开发一个Windows CE应用程序 现在,我想将所需的DLL放在主exe文件的子文件夹中。可能吗? 不适用于Windows CE 编辑: 我希望依赖项位于客户端设备上的子文件夹中 当前我的文件夹结构如下(所有内容都在一个目录中) 我想要的是:C# Compact Framework—将依赖项(DLL)放置在子文件夹中,c#,.net,compact-framework,C#,.net,Compact Framework,我正在使用Visual Studio 2008和Compact Framework 3.5开发一个Windows CE应用程序 现在,我想将所需的DLL放在主exe文件的子文件夹中。可能吗? 不适用于Windows CE 编辑: 我希望依赖项位于客户端设备上的子文件夹中 当前我的文件夹结构如下(所有内容都在一个目录中) 我想要的是: -- folder\ ------ main.exe ------ lib\ --------- controls.dll --------- webservice
-- 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>
您应该能够将所需的DLL放置在任何需要的地方 显然,在项目的文件夹结构中定位它们是有意义的 要在项目文件夹结构中添加对DLL的引用,只需右键单击引用部分,然后选择添加引用 请注意,在屏幕截图中,SQLite.Interop.066.DLL仅在对话框中可见。我就是这样把它添加到我的项目中的 希望这有帮助
您应该能够将所需的DLL放置在您想要的任何位置 显然,在项目的文件夹结构中定位它们是有意义的 要在项目文件夹结构中添加对DLL的引用,只需右键单击引用部分,然后选择添加引用 请注意,在屏幕截图中,SQLite.Interop.066.DLL仅在对话框中可见。我就是这样把它添加到我的项目中的 希望这有帮助
您不能直接使用“添加引用”对话框。exe文件要求dll与可执行文件位于同一路径,或者应该注册它们(我不知道这是如何工作的)。“添加引用”对话框仅在该路径中复制这些DLL 我唯一的想法是动态dll发现,这是好的(对于后期bynding,请参阅Mef),但是我不知道是否使用CompactFramework 3.5 最好的解决方案可能是将DLL添加到exe文件的搜索路径中,这个问题是迄今为止我找到的唯一好的资源:
您不能直接使用“添加引用”对话框。exe文件要求dll与可执行文件位于同一路径,或者应该注册它们(我不知道这是如何工作的)。“添加引用”对话框仅在该路径中复制这些DLL 我唯一的想法是动态dll发现,这是好的(对于后期bynding,请参阅Mef),但是我不知道是否使用CompactFramework 3.5 最好的解决方案可能是将DLL添加到exe文件的搜索路径中,这个问题是迄今为止我找到的唯一好的资源:
compact framework不支持在app.config文件中设置探测路径。不过,有几件事你可以试着解决 我的第一个猜测是将子文件夹添加到系统加载器的搜索路径中,尽管我不知道我是否曾经在托管汇编中尝试过。要扩展加载程序路径,只需将路径作为另一个字符串添加到位于
[HKLM\loader\SystemPath]
的MULTI_SZ注册表项中。我也不确定这是否需要软重置来让操作系统接受更改。播放WM\u设置频道也值得一试
托管程序集的第二个选项是在使用目标中的任何类之前,在出现时手动加载程序集。调用Assembly.LoadFrom
加载它,此时CLR将能够加载它
本机DLL的第二个选项是使用到目标的完整路径调用DLL上的p/Invoke。一旦第一次P/Invoke加载,对dll名称的任何进一步调用(即使没有路径)都将正确解析,因为它将只使用由LoadLibrary
检索的内部句柄。compact framework不支持在app.config文件中设置探测路径。不过,有几件事你可以试着解决
我的第一个猜测是将子文件夹添加到系统加载器的搜索路径中,尽管我不知道我是否曾经在托管汇编中尝试过。要扩展加载程序路径,只需将路径作为另一个字符串添加到位于[HKLM\loader\SystemPath]
的MULTI_SZ注册表项中。我也不确定这是否需要软重置来让操作系统接受更改。播放WM\u设置频道也值得一试
托管程序集的第二个选项是在使用目标中的任何类之前,在出现时手动加载程序集。调用Assembly.LoadFrom
加载它,此时CLR将能够加载它
本机DLL的第二个选项是使用到目标的完整路径调用DLL上的p/Invoke。在第一次P/Invoke加载后,对dll名称的任何进一步调用(即使没有路径)都将正确解析,因为它将只使用由LoadLibrary
检索的内部句柄。是否希望它们位于开发环境的子文件夹或目标设备上?在目标上(我更新了我的问题).应用程序根目录外引用的程序集必须具有强名称。-MSDN()@leppie-这不是真的,probling
指令告诉运行时在子文件夹(本例中为lib)中查找程序集。如果在根目录中找不到程序集,则不需要使用强名称。但这是一个完整的框架。compact framework似乎忽略了app.config
文件。是否希望它们位于开发环境的子文件夹中或目标设备上?位于目标设备上(我更新了我的问题)。应用程序根目录之外的引用程序集必须具有强名称。-MSDN()@leppie-这不是真的,probling
指令告诉运行时,如果在根目录中找不到程序集,则在子文件夹(本例中为lib)中查找程序集
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="lib" />
</assemblyBinding>
</runtime>