Une application avec que j’ai travaillé est tombe en panne lorsque j’essaie de sérialiser les types.
Une telle affirmation
produit :
Je ne définis pas les sérialiseurs spéciaux pour ma classe.
Comment puis-je résoudre ce problème ?
Une application avec que j’ai travaillé est tombe en panne lorsque j’essaie de sérialiser les types.
Une telle affirmation
produit :
Je ne définis pas les sérialiseurs spéciaux pour ma classe.
Comment puis-je résoudre ce problème ?
Croyez le ou non, ce comportement est normal. Une exception est levée, mais géré par le XmlSerializer, donc si vous ignorez tout devrait continuer à bien.
J'ai trouvé cela très souvent embêtant, et il ya eu de nombreuses plaintes à ce sujet si vous recherchez un peu autour de lui, mais de ce que j'ai lu de Microsoft n'a pas l'intention de faire quoi que ce soit.
Vous pouvez éviter de tomber Exception popups tout le temps pendant le débogage si vous éteignez d'abord chance exceptions à cette exception. Dans Visual Studio, aller à Déboguer -> Exceptions (ou appuyez sur Ctrl + Alt + E), Common Language Runtime Exceptions -> Système.IO -> Système.IO.FileNotFoundException.
Vous pouvez trouver des informations sur un autre moyen de contourner cela dans le blog de C# XmlSerializer FileNotFound exception (Chris Vend de " l'outil de XmlSerializerPreCompiler).
À l'instar de Martin Sherburn dit, ce comportement est normal. Le constructeur de la XmlSerializer essaie d'abord de trouver un assembly nommé [YourAssembly].XmlSerializers.dll qui devrait contenir la classe générée pour la sérialisation de votre type. Depuis une DLL n'a pas été générée encore (ils ne sont pas par défaut), un FileNotFoundException est levée. Lorsque que happenes, XmlSerializer constructeur de captures que l'exception, et la DLL est généré automatiquement lors de l'exécution par le XmlSerializer du constructeur (ce qui est fait en générant des fichiers source C# dans le répertoire %temp% de votre ordinateur, puis de les compiler en utilisant le compilateur C#). Constructions annexes d'un XmlSerializer pour le même type utilisera simplement le déjà DLL générée.
Mise à JOUR: à partir de .NET 4.5,
XmlSerializer
n'exécute plus la génération de code ni effectuer la compilation avec le compilateur C# afin de créer un sérialiseur de l'assemblée au moment de l'exécution, sauf s'il est explicitement forcé par la fixation d'un fichier de configuration de paramètre (useLegacySerializerGeneration). Cette modification supprime la dépendance à l'égardcsc.exe
et améliore les performances de démarrage. Source: .NET Framework 4.5 Readme, section 1.3.8.1.
L'exception est gérée par XmlSerializer du constructeur. Il n'est pas nécessaire de tout faire vous-même, vous pouvez simplement cliquez sur "Continuer" (F5) pour poursuivre l'exécution de votre programme et tout ira bien. Si vous êtes gêné par les exceptions de l'arrêt de l'exécution de votre programme et de sauter jusqu'à une exception helper, vous avez "Juste Mon Code" éteint, ou si vous avez le FileNotFoundException séance d'exécution lors de la levée, au lieu de quand 'non'.
Pour activer l'option " Juste Mon Code, allez dans Outils >> Options >> Débogage >> Général >> Activer uniquement Mon Code. Pour désactiver la rupture de l'exécution lorsqu'FileNotFound est levée, aller à Déboguer >> Exceptions >> Trouver >> entrez "FileNotFoundException' >> décocher la 'Levée' case à cocher à partir du Système.IO.FileNotFoundException.
Pour éviter l'exception que vous devez faire deux choses:
Ajouter le Système.Xml.La sérialisation.XmlSerializerAssembly attribut de ta classe. Remplacer "MyAssembly" avec le nom de l'assemblée, où MyClass.
[Serializable]
[XmlSerializerAssembly("MyAssembly.XmlSerializers")]
public class MyClass
{
…
}
Générer le fichier en utilisant la sérialisation sgen.exe l'utilitaire et le déployer avec la classe de l'assemblée.
‘sgen.exe MyAssembly.dll' va générer le fichier MyAssembly.XmlSerializers.dll
Ces deux changements feront l' .net pour savoir directement à l'assemblée. J'ai vérifié et il fonctionne sur .NET framework 3.5 avec Visual Studio 2008
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.