2011-08-12 109 views
2

我建立在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在这两个目录(系统路径和模块)。

我想要的是一种告诉模块文件API.dll在该文件夹中的方式,当我用Assembly.Load加载它时。

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

我能做些什么来解决这个问题?

+0

我建议你在Stack Overflow上搜索'AppDomain.CurrentDomain.AssemblyResolve'。你一定会发现一个现存的问题来回答你的问题。 – stakx

回答

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的引用,它将自动从顶层目录中获取它。

0

您确定API.dll需要位于Module1/2.dll所在的文件夹中吗?当您以编程方式加载模块时,主应用程序中的API.dll已经加载。只要确保它们是用相同版本的API编译的。