2010-10-18 4 views
10

Les applications Silverlight (le fichier .xap, le testpage.html, les ressources de contenu à côté d'un ClientBin, les paramètres du navigateur, etc.) peuvent-elles être créées en utilisant uniquement System.CodeDom à partir d'une application .NET standard? Signification J'ai une console ou une application winforms qui crée des applications Silverlight - est-ce possible avec System.Codedom?CodeDom et Silverlight

J'ai recherché haut et bas et je n'ai trouvé aucune information à ce sujet.

+0

Wow, c'est une question assez intéressante. Avez-vous essayé quelque chose vous-même? Je ne peux pas penser à une raison pour laquelle ce ne serait pas possible, mais je ne sais pas avec certitude. Je pense qu'il est important de s'assurer que l'assembly généré fait référence aux versions correctes des assemblys de plate-forme Silverlight (mscorlib, System.Windows, etc.) et non à leurs homologues de bureau. Une application Silverlight n'est rien de plus qu'une collection d'assemblys et un fichier AppManifest.xaml dans un fichier zip avec une extension .xap. Je suis curieux de savoir quel est le scénario qui vous amène à vouloir faire cela? – KeithMahoney

+0

Merci Keith. J'ai regardé MSBuild pour la même option, mais les gens semblent suggérer que MSBuild est excessif et CodeDom.Compiler est suffisant pour les situations normales - je ne sais pas si c'est le cas pour Silverlight. Un scénario serait un créateur de cartes eGreeting où il y a une forte personnalisation (je sais que cela pourrait avoir une approche différente, mais par souci d'argumenter, disons simplement que c'est comme ça que ça doit être) - un site ASP.NET de base cela prend un tas de paramètres différents de l'entrée de l'utilisateur et le résultat est une application Silverlight compilée. Faites ceci plusieurs fois. – Stan

+0

Pour votre scénario, je vous suggère d'adopter une approche alternative, par ex. une application Silverlight générique qui télécharge toutes les données de personnalisation de manière dynamique au moment de l'exécution. Si vous décidez d'emprunter la voie de la génération de code: je voudrais pouvoir vous donner une meilleure réponse que "il n'y a pas de raison évidente pour que cela ne marche pas". – KeithMahoney

Répondre

4

Bien que ce soit un défi, il devrait probablement être possible. Si vous regardez ce que le cadre lui-même fait, il y a quelques options cependant.

  • Par exemple, la classe Regex utilise System.Reflection.Emit pour compiler vos expressions reguläre;

  • XmlSerializer utilise System.CodeDom pour générer des assemblages pour la sérialisation et la désérialisation de XML; ASP.Net appelle le compilateur C# (csc.exe) pour compiler les pages ASPX (et toutes les autres parties de l'application ASP.Net) dans un assembly.

Toutes ces options permettent de créer un assemblage valide, de très complexe à relativement facile.

Et concernant votre partie Silverlight de la question. Cela devrait simplement être un cas de création d'un projet valide. Probablement le moyen le plus simple d'aller est de créer le projet Silverlight le plus simple auquel vous pouvez penser (donc, sans aucun contenu) et d'essayer de l'émuler avec l'une des trois options. Si vous avez ce fonctionnement, ajoutez progressivement des pièces jusqu'à ce que vous ayez ce dont vous avez besoin.