关于c#程序集搜索Dll目录问题

问题:我在一个程序集中动态加载一个Dll。而这个Dll中去反序列化它的配置信息。每次都是在反序列化时出错,错误信息如下:

+ InnerException {"无法将类型为“System.Collections.Generic.List`1[Com.Shengzuo.CommonalityDataSource.ConfigInfo]”的对象强制转换为类型“System.Collections.Generic.List`1[Com.Shengzuo.CommonalityDataSource.ConfigInfo]”。"} System.Exception {System.InvalidCastException}

解决:是我在程序集的根目录和子目录下分别放置Dll这时程序集认为这个类型是存在于两个Dll为不同的类型不能强制转换。

根源在于:程序集查找Dll时根目录要优先于其它目录。

当运行库试图解析对另一个程序集的引用时,就开始进行定位并绑定到程序集的进程。该引用可以是静态的,也可以是动态的。在生成时,编译器在程序集清单的元数据中记录静态引用。动态引用是由于调用各种方法而动态构造的,例如 方法。

引用程序集的首选方式就是使用完全引用,包括程序集名称、版本、区域性和公钥标记(如果存在)。运行库就会按照本节后面描述的步骤,使用这些信息来定位程序集。无论引用是对静态程序集的引用还是对动态程序集的引用,运行库均使用相同的解析过程。

还可通过向调用方法仅提供有关程序集的部分信息的方式(例如仅指定程序集名称),对程序集进行动态引用。在这种情况下,仅在应用程序目录下搜索程序集,不进行其他检查。使用加载程序集(如 )的各种方法中的一种进行部分引用。

最后,您可以使用诸如 元素限定该引用。该元素使您可以在应用程序配置文件中而不是在代码中提供完全引用信息(名称、版本、区域性,如果适用还有公钥标记)。如果要在应用程序目录外完全限定对某个程序集的引用,或者如果要引用全局程序集缓存中的程序集,但又希望方便地在配置文件中而不是在代码中指定完全引用,就可以采用这一技术。