设置装配参考路径

时间:2011-08-12 20:35:41

标签: c# reflection assemblies

我使用这种结构在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加载它时。

我无法使用全局程序集缓存,无法更改此结构。

我该怎么做才能解决这个问题?

2 个答案:

答案 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进行编译。