一个VS2003的Add-in由3个dll组成,现在出现的问题是:在这个Add-in被加载时,其中一个dll(problem.dll)____有时候(现在还没有发现规律)____会被加载两次。一次从C:\problem.dll这个文件(期望的位置)加载,另一次从C:\Documents and Settings\whf.ZTLQ\Application Data\Microsoft\VisualStudio\7.1\ProjectAssemblies\jnk324\problem.dll(应该是由VS自动从C:\problem.dll拷贝过来的)加载。如果发生这种加载两次的情况,则会引发如下问题:由于problem.dll中的一些对象(比如PersistLayer.Mappings.Mapping的实例)被序列化为XML文档,在add-in启动时,problem.dll会反序列化这些对象。问题就出在这里,代码如下: public static PersistLayer.Mappings.Mapping Deserialize(string strXmlFilePath)
{
XmlSerializer s = new XmlSerializer(typeof(PersistLayer.Mappings.Mapping));
using (StreamReader sr = new StreamReader(strXmlFilePath))
{
object o = s.Deserialize(sr);
Type t = o.GetType();
Type t2 = typeof(PersistLayer.Mappings.Mapping);
PersistLayer.Mappings.Mapping m = (PersistLayer.Mappings.Mapping)o;
return m;
}
}PersistLayer.Mappings.Mapping m = (PersistLayer.Mappings.Mapping)o;这句引发InvalidCastException。在调试器里可以看到o指向的是C:\Documents and Settings\whf.ZTLQ\Application Data\Microsoft\VisualStudio\7.1\ProjectAssemblies\jnk324\problem.dll中的PersistLayer.Mappings.Mapping类的一个实例;而(PersistLayer.Mappings.Mapping)o中的PersistLayer.Mappings.Mapping类被认为是
C:\problem.dll中的PersistLayer.Mappings.Mapping类。为什么会出现这种情况?如何处理?