Système.InvalidOperationException: Impossible de générer une classe temporaire (résultat=1)
J'ai développé une application à l'aide .net 3.5 et ont déployé comme une .exe sur un certain nombre de machines avec le même environnement.
Cependant, sur une machine, j'obtiens l'erreur suivante. La Trace De Pile:
Voir la fin de ce message pour plus de détails sur l'appel du
juste-à-temps (JIT) de débogage à la place 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)
Chargé Assemblé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 juste-à-temps (JIT) débogage, l' .fichier de configuration pour cette
de l'application ou de l'ordinateur (la machine.config) doit avoir le
jitDebugging valeur définie dans le système.de windows.la section des formulaires.
La demande doit également être compilé avec le débogage
activé.
Par exemple:
Lorsque le débogage JIT est activé, une exception non gérée
sera envoyé au débogueur JIT inscrit sur l'ordinateur
plutôt que d'être gérées par cette boîte de dialogue.
Quelqu'un pourrait-il m'aider?
Comme je suis nouvelle .net quelqu'un pourrait aussi me dire pourquoi quand une classe temporaire doit être créé en premier lieu?
- Pourriez-vous poster du code en tant que bien, s'il vous plaît?
- hanselman.com/blog/... a quelques infos sur ce
- Il est possible de générer un xml-sérialisation-assemblée-comme-partie-de construire et d'inclure dans le déploiement de stackoverflow.com/questions/134224/...
Vous devez vous connecter pour publier un commentaire.
De la Sérialisation XML génère du code pour effectuer la sérialisation. Ceci est fait dans un assembly temporaire créé à cet effet la première fois que cela est nécessaire.
Cependant cela repose sur le fait d'être capable d'écrire de l'assemblée sur le disque.1
Vos options sont soit de (1) étant donné le compte d'utilisateur qui exécute le processus d'autorisation d'écriture (pour une ASP.NET c'est probablement une mauvaise idée). (2) Utiliser le SDK de l'outil (sgen.exe) de pré-générer (au développement/moment de la compilation) la sérialisation de l'assemblée, et ensuite utiliser (et deplot) l'assemblée.
1Open question: il existe des Api pour créer des assemblages de façon dynamique dans la mémoire: pourquoi ne pas le faire?
Je viens de passer beaucoup de temps à chercher la réponse à cette donc je pensais que je voudrais ajouter ici, pour économiser des maux de tête pour les autres. Si vous utilisez le xsd.exe outil pour générer votre cs il peut avoir ajouté un double des tableaux [][] où un tableau doit être []. Remplacer toutes les [][] avec [] dans vos généré cs fichier et réessayez.
Vous n'avez qu'à donner la Liste du Contenu du Dossier et les autorisations de Lecture sur le dossier %windir%\Temp.
J'ai trouvé ce post en essayant de résoudre mon problème, et ne pas avoir à donner mon compte d'utilisateur d'accès en écriture.
À Partir De Microsoft
Vous Devez donner la permission de le dossier temp qui est dans le dossier windows. Et Votre Problème est Résolu...........
De surfaçage @grzenio commentaire un peu plus loin pour les utilisateurs récents:
Si vous allez dans les Propriétés du Projet -> Build -> Générer l'assembly de sérialisation ->, elle force la génération du XML sérialiseurs de l'assemblée au moment de la compilation, éliminant le besoin de le faire au moment de l'exécution.
À son tour, cela signifie que vous n'avez pas besoin de changer les permissions du système de fichiers (utile si vous êtes, par exemple, l'hébergement sur Windows Azure Web Sites, où ce n'est pas une option).
Vous devez ajouter *IIS_IUSR* l'utilisateur avec lire la permission d'écrire à C:\Windows\Temp dossier.
NOTE: tout le monde ne fonctionnera pas avec un contrôle total.
Il peut être aussi juste une simple erreur dans la classe sérialisée (généralement à la suite de quelques copier/coller). Par exemple, la classe suivante sera la cause de cette erreur:
Avis que typeof(Propriété) paramètre dans XmlArrayItem attribut n'est pas compatible (le plus probable), avec de la ficelle des faits similaires exception:
Si typeof(Propriété) est remplacé par typeof(string) la sérialisation ne fonctionne de nouveau.
Juste un sauvage deviner: je suppose que cette possibilité n'existait pas encore .NET 1.0, ou au moins lorsque le XmlSerializer a été créé et MS n'aime pas changer de comportement existant...
Donner des Privilèges de Lecture/Écriture de 'C:\WINDOWS\TEMP' dossier. Il va travailler.
Il est peut-être parce que vous êtes de commutation de demande de mise en commun de l'identité dans
IIS
à être le mot de passe au lieu de prédéfinies
si vous en avez un de ce qui suit
Dans le cas où cela peut aider n'importe qui, mon problème venait d'une classe héritée utilisé dans la fabrication en série. Le problème a disparu quand j'ai fait un copie/coller de ma classe, j'ai été la sérialisation et la quitter à l'aide de ineritance. Malheureusement, les avantages de l'héritage est allé loin, mais c'est mieux que d'avoir ce problème. (Bon, au moins je suis assez sûr que ce soit résolu. Arrivé à faire un reboot là quelque part aussi.)