我有一个C#应用程序,让我们称之为App.exe.它引用了一个名为A.dll的DLL,它依次引用另一个DLL,即B.dll.然而,引用它们的方式有点不同.在A.dll的代码中,它直接引用了B.dll(转到Project> References> Add B.dll).但是,我的App.exe有使用Assembly.Load()等在运行时加载A.dll的代码.
所以要回顾一下,App.exe —-(运行时加载)—> A.dll —-(直接引用)—> B.DLL
所有三件事(App.exe,A.dll和B.dll)都位于同一个目录中,就是说ExeDir.现在我想做的是将A.dll和B.dll放在ExeDir的子目录中.我可以通过使用指定A.dll的路径的App.config文件来执行此操作,并要求App.exe从该路径加载A.dll.到现在为止还挺好.
但是问题是,当我这样做,.NET给我一个错误,说它找不到与D.dll在同一目录中的B.dll.如果我将其移动到原始目录(与App.exe相同的目录),那么它可以正常工作.这意味着我可以把A.dll放在一个子目录中,但是B.dll需要在原来的目录下.
有没有什么办法可以将这两个DLL保存在子目录中?
解决方法
添加< probing>你的app.config中的元素:
http://msdn.microsoft.com/en-us/library/823z9h8w.aspx
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="bin;bin2\subbin;bin3"/> </assemblyBinding> </runtime> </configuration>