我使用这种结构在C#中构建了一个应用程序:
Systempath下
- MainApplication.EXE
- API.dll
- 模块
------- Module1.dll
------- Module2.dll
MainApplication.exe具有对程序集API.dll的引用。它通过“Assembly.Load(dllFile)”使用程序集Module1和Module2。 Module1.dll和Module2.dll文件也需要文件API.dll。
因此,他们需要API.dll在相同的路径中,我需要将文件API.dll放在两个目录(SystemPath和Modules)中。
我想要的是告诉模块文件API.dll在该文件夹中的方法,当我使用Assembly.Load加载它时。
我无法使用全局程序集缓存,无法更改此结构。
我该怎么做才能解决这个问题?
答案 0 :(得分:4)
在MainApplication.exe.config文件中,您可以添加<probing> element,指定在加载程序集时将搜索的以分号分隔的子目录列表。例如:
<?xml version="1.0"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="Modules" />
</assemblyBinding>
</runtime>
</configuration>
在您的配置中使用此功能,您将能够在Module1上执行Assembly.Load或引用;并且由于您的应用程序根仍处于顶层,如果Module1执行Assembly.Load或引用API.dll,它将自动从顶级目录获取它。
答案 1 :(得分:0)
您确定API.dll需要与Module1 / 2.dll位于同一个文件夹中吗?当您以编程方式加载模块时,已加载主应用程序中的API.dll。只需确保它们已使用相同版本的API进行编译。