64 votes

System.InvalidOperationException : Impossible de générer une classe temporaire (result=1)

J'ai développé une application en utilisant .net 3.5 et je l'ai déployée en tant que .exe sur un certain nombre de machines ayant le même environnement. Cependant, sur une machine particulière, j'obtiens l'erreur suivante. Stack Trace :


Voir la fin de ce message pour plus de détails sur l'invocation de l'option le débogage juste à temps (JIT) au lieu de cette boîte de dialogue.

System.InvalidOperationException: Unable to generate a temporary class (result=1).
error CS2001: Source file 'C:\WINDOWS\TEMP\wz58eig4.0.cs' could not be found
error CS2008: No inputs specified

   at System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence)
   at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Assembly assembly, Hashtable assemblies)
   at System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence)
   at System.Xml.Serialization.XmlSerializer.GetSerializersFromCache(XmlMapping[] mappings, Type type)
   at System.Xml.Serialization.XmlSerializer.FromMappings(XmlMapping[] mappings, Type type)
   at System.Web.Services.Protocols.SoapClientType..ctor(Type type)
   at System.Web.Services.Protocols.SoapHttpClientProtocol..ctor()
   at SSOClient..ctor()
   at sc.tradesvc.SSOManager..ctor()
   at sc.tradesvc.SSOManager.get_Inst()
   at sc.cashflowgenerator.Controls.LoginForm.btnLogin_Click(Object sender, EventArgs e)
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.PerformClick()
   at System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)
   at System.Windows.Forms.TextBoxBase.ProcessDialogKey(Keys keyData)
   at System.Windows.Forms.Control.PreProcessMessage(Message& msg)
   at System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg)
   at System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)

Assemblées chargées :

mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll

CashflowGenerator
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/DATA/DEVEL/Output/CashflowGenerator.exe

System.Windows.Forms
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll

System
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll

System.Drawing
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll

System.Configuration
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll

System.Xml
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll

System.Core
    Assembly Version: 3.5.0.0
    Win32 Version: 3.5.21022.8 built by: RTM
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Core/3.5.0.0__b77a5c561934e089/System.Core.dll

System.Web.Services
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Web.Services/2.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll

************** Débogage JIT ************** Pour activer le débogage juste à temps (JIT), le fichier .config de cette application ou de cet ordinateur (machine.config) doit être modifié. application ou de l'ordinateur (machine.config) doit contenir la valeur jitDebugging dans la section system.Windows.forms. L'application doit également être compilée avec le débogage activé.

Par exemple :

Lorsque le débogage JIT est activé, toute exception non gérée sera envoyée au débogueur JIT enregistré sur l'ordinateur plutôt que d'être traitée par cette boîte de dialogue.


Quelqu'un peut-il m'aider ?

Comme je suis novice en .net, quelqu'un pourrait-il me dire pourquoi une classe temporaire doit être créée en premier lieu ?

115voto

Terra Points 138

Je viens de passer beaucoup de temps à chercher la réponse à cette question et j'ai donc pensé l'ajouter ici pour éviter à d'autres de se prendre la tête. Si vous utilisez l'outil xsd.exe pour générer votre cs, il se peut qu'il ait ajouté des tableaux doubles [][] là où un tableau devrait être []. Remplacez tous les [][] par [] dans votre fichier cs généré et réessayez.

30voto

Richard Points 54016

La sérialisation XML fonctionne en générant du code pour effectuer la sérialisation. Cela se fait dans un assemblage temporaire créé à cet effet la première fois qu'il est nécessaire.

Cependant, cela suppose que l'on puisse écrire l'assemblage sur le disque. 1

Vous pouvez soit (1) donner au compte d'utilisateur qui exécute le processus le droit d'écriture (pour une application ASP.NET, il s'agit probablement d'une mauvaise idée). (2) Utiliser l'outil SDK ( sgen.exe ) pour pré-générer (au moment du développement/compilation) l'assemblage de sérialisation, puis utiliser (et déploter) cet assemblage.

1 Question ouverte : les API existent pour créer des assemblages dynamiquement en mémoire : pourquoi ne pas le faire ?

24voto

BillRob Points 898

Il vous suffit d'accorder les autorisations List Folder Contents et Read à %windir%. \Temp.

J'ai trouvé cet article en essayant de résoudre mon problème, et je n'ai pas eu à donner à mon compte utilisateur un accès en écriture.

De Microsoft

5voto

Ayush Chaudhary Points 31

Vous devez donner l'autorisation au dossier temporaire qui se trouve dans le dossier Windows. Et votre problème est résolu...........

3voto

rmc47 Points 655

Je fais remonter le commentaire de @grzenio un peu plus loin pour les utilisateurs récents :

Si vous allez dans Propriétés du projet -> Construire -> Générer l'assemblage de sérialisation -> Activé, cela force la génération de l'assemblage de sérialisation XML au moment de la compilation, ce qui élimine la nécessité de le faire au moment de l'exécution.

Cela signifie que vous n'avez pas besoin de modifier les autorisations du système de fichiers (ce qui est utile si vous hébergez, par exemple, sur des sites Web Windows Azure, où cela n'est pas possible).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X