积极答复者
引用程序集位置的问题

问题
答案
-
试试AppDomain.AssemblyResolve事件
http://www.cnblogs.com/feiyun0112/archive/2009/07/03/1516512.html
http://feiyun0112.cnblogs.com/- 已标记为答案 Bunliney 2011年8月15日 8:31
全部回复
-
程序集是怎么样被动态加载的?同一个 AppDomain?
如果使用 Assembly.Load, LoadFile 等方法加载,那么动态程序集的 Working Directory 就和主程序集一致,也就是上面说的 A 的目录,B 的依赖引用当然会去从 A 的目录找了。不过,可以通过 app.config 的 assemblyBinding 的 probe 节点增加目录,以便 CLR 在这些额外的目录中寻找依赖项。但是,您说加载的目录可能是动态的。。。那么,就只能把动态程序集都加载到另一个 AppDomain 中去了。
加载到另一个 AppDomain 后,设置其 WorkingDirectory 到特定目录就可以解决依赖项找不到的问题。不过,您要考虑将程序集加载到另一个 AppDomain 的问题,比如类型跨域,您需要考虑到底是 By Value 还是 By Marshal Ref。
Mark Zhou -
被加载的程序集文件路径是不固定的,加载方(A)是使用反射在运行时去搜索需要加载的程序集的(这些程序集都放在一个目录下,但可能在不同的子文件夹中)。
而B加载的程序集都是在设计时引用的,与B在同一文件夹中。
我所需要的是让B能够去自己所在文件夹中查找引用的程序集(这在通常情况下是很平凡的),而不会因为是A加载的B,就导致B去A所在的文件夹中查找所引用的程序集。
所以困扰我的是,B所引用的程序集全部都要放在A所在的文件夹中(或系统目录中),这样不仅会使A所在的文件夹里很乱,更可能导致不同的B引用了不同版本的同一程序集,进而互相覆盖
在设计B的时候,加载的那些程序集指定它们的路径,也不行吗?
Lucky Dog -
Hi~
請先參考這篇: http://www.dotblogs.com.tw/nobel12/archive/2011/07/27/32162.aspx
此時,您把你所謂的工作路徑變數 ( 假定為 WorkPath ) 在 B類中再宣告使用時改為
new string WrokPath = "C:\\.......";
用這樣的方式試試看。
或許是A類在設計上的問題,導致讓你在B類上發生這樣一個情況,
但使用關鍵字 new 請 **小心使用** ,不然容易造成您程式架構 / 邏輯等問題喔!
逐步學習,逐夢踏實;腳步要踩穩,這樣下一步才不會跌倒。 http://www.dotblogs.com.tw/nobel12 -
添加引用的时候可以设置dll 的属性,设置 Copy Local = false,试试看。
GAC和.NET 的一些程序都是用这个属性来限制dll copy到 同一个目录下的。
http://msdn.microsoft.com/zh-cn/library/yf1d93sz.aspx
Best Regards,
Rocky Yue[MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
-
现在唯一的解决方法就是为每一个B创建一个AppDomain
就目前来看,就这一个方法了。 让我们期待微软的更新技术吧。
Best Regards,
Rocky Yue[MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
-
试试AppDomain.AssemblyResolve事件
http://www.cnblogs.com/feiyun0112/archive/2009/07/03/1516512.html
http://feiyun0112.cnblogs.com/- 已标记为答案 Bunliney 2011年8月15日 8:31
-
这样看来,就只能把引用的程序集放在同一个文件夹下或者GAC中了。
Best Regards,
Rocky Yue[MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.