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
- 食物插件
插件\*
部分
<?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吗?