我有一个动态加载程序集的应用程序:
Assembly asm = Assembly.Load("MyClass.DLL");
Type type = asm.GetType("MyClass");
MyClass runningAssembly = (MyClass)Activator.CreateInstance(type);
runningAssembly.start();
加载并调用start()方法后,执行以下代码:
XmlSerializer deserializer = new XmlSerializer(typeof(MyClass));
抛出以下异常:
"Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
我一直在绊倒这个原因并且无法掌握它。有人有任何提示吗?我似乎也无法捕捉到这个错误......它在try / catch中一直吹响。
顺便说一下,错误不会始终发生。有时在调试模式下它工作正常,但似乎一旦它启动,它甚至会在重新启动Visual Studio后发生。重新启动会将其清除并允许它至少工作一次。从已编译的EXE运行时也会发生这种情况。
修改
我尝试了同样的事情,但没有动态加载程序集。我把它直接称为一个类,即:
MyClass c = new MyClass();
c.start();
同样的问题仍然存在,因此它似乎与动态加载无关。
答案 0 :(得分:1)
现在很难在不了解MyClass
的情况下导致问题的原因。什么是构造函数,尤其是start()
方法中的内容?代码是否有任何不安全的代码?如果你正在解决不安全的记忆,你很可能会遇到所描述的行为。
如果你的start()
方法正在启动一个新线程并且新线程抛出异常,你将无法在start
方法的try / catch中捕获它。