2010-10-28 2 views
0

J'ai une application qui charge un ensemble dynamique:nouveau XmlSerializer (typeof (MyClass)) Causer la corruption de la mémoire?

Assembly asm = Assembly.Load("MyClass.DLL"); 
Type type = asm.GetType("MyClass"); 

MyClass runningAssembly = (MyClass)Activator.CreateInstance(type); 
runningAssembly.start(); 

Une fois chargée et la méthode start() est appelée, cette ligne de code est exécuté:

XmlSerializer deserializer = new XmlSerializer(typeof(MyClass)); 

Et l'exception suivante est lancé:

"Attempted to read or write protected memory. This is often an indication that other memory is corrupt." 

J'ai la cause incertaine sur cela et ne l'ai pas été en mesure d'obtenir une emprise sur elle. Est-ce que quelqu'un a des conseils? Je n'arrive pas non plus à piéger cette erreur ... ça souffle tout au long de l'essai/catch. Par ailleurs, l'erreur se produit toujours. Parfois, en mode de débogage, cela fonctionne bien, mais il semble qu'une fois qu'il a démarré, il arrivera toujours même après le redémarrage de Visual Studio. Un redémarrage l'efface et lui permet de fonctionner au moins une fois. Cela se produit également lors de l'exécution à partir du fichier EXE compilé.

EDIT

J'ai essayé la même chose, mais sans charger l'assemblage dynamique. Je l'ai appelé en tant que classe directement, i.e.:

MyClass c = new MyClass(); 
c.start(); 

Et le même problème persiste, il ne semble pas être lié à être chargé dynamiquement.

Répondre

1

Il est difficile de savoir maintenant ce qui cause les problèmes sans rien savoir sur MyClass. Quel est dans le constructeur et surtout ce qui est dans la méthode start()? Est-ce que le code a un code dangereux? Si vous vous adressez à une mémoire non sécurisée, vous risquez fort de rencontrer le comportement décrit.

Si votre méthode start() démarre un nouveau thread et qu'une exception est levée sur le nouveau thread, vous ne l'attraperez pas dans un try/catch autour de la méthode start.

Questions connexes