Bonjour à tous,
Je me permets de vous écrire car je suis face à un problème que je ne comprend pas.
Je vous explique ma situation :
C'set un projet c# 2.0.
Je fais de la génération de types à la volée (via Emit, en MSIL).
Je crée donc un AssemblyBuilder que je garde en static dans ma fabrique de type que est statique elle aussi. Je fais bien attention à ce que mon type n'existe pas déjà lorsque j'en crée un.
Cette bibliothèque est utilisée via ASP.NET.
IIS est en version 7, mais le problème survient
ensuite, ce qu'il m'arrive :
* Sur mon poste :
Windows Vista Buisness
Je lance l'application en mode Debug, tout va bien. Je laisse l'application tourner en mode debug, sans l'utiliser. Je reviens dessus 20 minutes (environ) plus tard, je recharge une page, et j'ai cette exception levée:
Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée.
J'arrête le mode debug. Je relance l'application en mode debug. Le message est touts là. Je dois faire un IISreset pour que l'erreur parte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 System.AccessViolationException: Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée. à TempAssemblyInjection__ProxySite.set_Id(MidwInt ) --- Fin de la trace de la pile d'exception interne --- à System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) à System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) à System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) à System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) à System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture) à System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, Object[] index) à EID.MidwAdaptator.Tools.ReflectionHelper.setValue(IClassAdaptator p_o, String p_field, String p_value) dans C:\Users\TRICOTBE\Developpements\PTF1_PLAR\EID.MidwAdaptator\Tools\ReflectionHelper.cs:ligne 232
* Sur mon serveur de test :
Windows server 2003
IIS en version 6
J'ai l'erreur vu ci-dessus dés le chargement d'une page. Impossible de m'en défaire.
* Sur le serveur de Prod :
IIS version 6
Framework .Net 2.0 uniquement
Tout marche à merveille
Le seul dénominateur commun que j'ai trouvé entre les deux machines où ça ne marche pas c'est qu'à un moment le framework 3.5 a été installé. Je l'ai désinstallé des deux machines. Les version d'iis sont différentes, et lorsque j'ai commencé mon projet, sur un Windows XP, avec le framework 2.0, tout marchait à merveille.
J'ai pensé à différentes possibilités mais sans savoir si elles sont vraiment plausibles:
* L'assembly générée (en mode Run) n'est plus consistante, c'est à dire que les interfaces des Type sont toujours là, par contre, l'assembly (et donc le coprs des méthodes) a du être détruit du genre c'est un fichier temporaire qui est détruit car non utilisé, ce qui expliquerai pourquoi l'erreur survient.
* Un problème de configuration d'IIS (mais je n'y connais rien ou presque).
Est-ce que vous pouvez m'aider à résoudre ce problème ?
Merci d'avance
Cordialement,
Benoît Tricot
Partager