C# App.config使用通配符或递归进行运行时探测

C# App.config使用通配符或递归进行运行时探测,c#,app-config,C#,App Config,我正试图通过元素加载dll。我有一个文件夹结构,由插件内部的几个插件文件夹组成。因此,我正在寻找一种方法,递归地遍历所有这些插件文件夹,以找到dll 这是我的文件夹结构: 我的申请 myapp.exe 插件 食物插件 foo.dll 棒插件 bar.dll 这就是我的App.config的样子,但它似乎没有抓住插件\*部分 <?xml version="1.0" encoding="utf-8"> <configuration> <runti

我正试图通过
元素加载dll。我有一个文件夹结构,由插件内部的几个插件文件夹组成。因此,我正在寻找一种方法,递归地遍历所有这些插件文件夹,以找到dll

这是我的文件夹结构:

  • 我的申请
    • myapp.exe
  • 插件
    • 食物插件
      • foo.dll
    • 棒插件
      • bar.dll
这就是我的App.config的样子,但它似乎没有抓住
插件\*
部分

<?xml version="1.0" encoding="utf-8">
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="MyApplication;plugins;plugins\*;"/>
    </assemblyBinding>
  </runtime>
</configuration>


如果我将其设置为:
它将找到foo.dll。但是我不确定会出现哪些插件。

在使用元素时不可能使用通配符搜索。相反,您需要将DLL复制到共享文件夹中,或者指定它们可能存在的每个文件夹


如果您的插件是由其他项目生成的,您可以将它们设置为直接生成到您的插件文件夹中,或者最好在
MyApplication
项目中有一个生成后任务,将文件复制到您的项目插件文件夹中。

您可以通过处理
AppDomain.CurrentDomain.AssemblyResolve
事件

然后在附加的事件处理程序中,只需调用:

Assembly=Assembly.LoadFile(路径:assemblyPath);
返回程序集;//返回已解析的程序集


assemblyPath
是程序试图获取的DLL的绝对路径,您可以通过在运行时扫描DLL文件夹,然后获取包含缺少的DLL名称的路径来获取该路径。

我对此不熟悉,但插件之间有什么区别;&插件*??在我看来是一样的。探测不会递归地遍历文件夹,所以它不会找到foo.dll,因为它位于插件的子文件夹中。我不认为你可以这样搜索。是的,@DavidG是正确的。如果你的插件项目都编译到不同的位置,您可以进行更改,使其编译到共享插件文件夹,或执行生成后任务,将DLL复制到共享文件夹。我希望在我的插件文件夹中包含文件夹。您能告诉我如何在运行时附加privatePath吗?