Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Compact Framework—将依赖项(DLL)放置在子文件夹中_C#_.net_Compact Framework - Fatal编程技术网

C# Compact Framework—将依赖项(DLL)放置在子文件夹中

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

我正在使用Visual Studio 2008和Compact Framework 3.5开发一个Windows CE应用程序

现在,我想将所需的DLL放在主exe文件的子文件夹中。可能吗? 不适用于Windows CE

编辑:

我希望依赖项位于客户端设备上的子文件夹中

当前我的文件夹结构如下(所有内容都在一个目录中)

我想要的是:

-- 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>