J'utilise beaucoup XmlSerializer et plutôt que de permettre à .NET de générer les assemblages de sérialisation nécessaires à l'exécution, je voudrais générer ces assemblages à l'avance et les regrouper avec mon application. Je suis capable d'utiliser Sgen pour générer ces assemblages au moment de la construction. De plus, je dois exécuter Sgen séparément pour chaque type de tableau que je sérialiserai (en utilisant sgen/t: Foo []). Enfin, j'utilise ILMerge pour fusionner les classes de sérialisation de type tableau dans l'assembly Foo.XmlSerializers.dll. J'ai vérifié avec ildasm que Foo.XmlSErializers.dll contient en fait toutes les classes fusionnées.Pré-génération de XmlSerializers avec Sgen et ILMerge. Problème avec les tableaux
Lors de l'exécution, .NET charge correctement FooSerializer à partir de Foo.XmlSerializers.dll sans invoquer csc et générer un assembly temporaire. Toutefois, .NET ne parvient pas à charger ArrayOfFooSerializer à partir de la même DLL et appelle en fait csc.
Comment pré-générer avec succès des types de sérialisation pour des tableaux?
Tenir compte des 2 assemblées et leur contenu simplifié suivants:
Assemblée: MyApp.exe
public class MyApp
{
public static int Main(string[] args)
{
new XmlSerializer(typeof(Foo));
new XmlSerializer(typeof(Foo[]));
}
}
Assemblée: Foo.dll
public class Foo
{
}
Plus d'infos:
Le Après app.config, les événements liés à XmlSerialization sont ajoutés à e Journal des événements
<configuration>
<system.diagnostics>
<switches>
<add name="XmlSerialization.PregenEventLog" value="1" />
<add name="XmlSerialization.Compilation" value="1" />
</switches>
</system.diagnostics>
</configuration>
Je ne vois aucun événement pour le type Foo. Je vois le message suivant pour Foo []:
sérialiseur prégénérés 'Foo.XmlSerializers' a expiré. Vous besoin de re-générer le sérialiseur pour 'Foo []'.