Actuellement, du code est généré dynamiquement. En d'autres termes, un fichier C# .cs est créé dynamiquement par le programme, et l'intention est d'inclure ce fichier C# dans un autre projet. Le problème est que je voudrais générer un fichier .DLL au lieu de générer un fichier C# .cs afin qu'il puisse être référencé par n'importe quel type d'application .NET (pas seulement C#) et donc être plus utile.Génération de l'assembly DLL dynamiquement au moment de l'exécution
Répondre
using System.CodeDom.Compiler;
using System.Diagnostics;
using Microsoft.CSharp;
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler icc = codeProvider.CreateCompiler();
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = false;
parameters.OutputAssembly = "AutoGen.dll";
CompilerResults results = icc.CompileAssemblyFromSource(parameters, yourCodeAsString);
Adapté de http://support.microsoft.com/kb/304655
En ce moment, votre meilleur pari est CSharpCodeProvider; les plans pour 4.0 incluent "compiler comme un service", ce qui rendra cela entièrement géré.
le titre du sujet est "generate-dll-assembly-dynamically-at-run-time" PAS "générer-EXE-assembly-dynamiquement-at-run-time" votre description de lien abut créer exe à l'exécution. –
@AminGhaderi et qui a dit quoi que ce soit sur exe? Si vous voulez dire "mais l'exemple de code sur MSDN crée un exe" - il créera aussi des DLLs avec plaisir; en fin de compte, le paquet de fichiers n'est * pas * la partie intéressante d'un assemblage –
La façon non dépréciée de le faire (en utilisant .NET 4.0 affiches précédentes mentionnées):
using System.CodeDom.Compiler;
using System.Reflection;
using System;
public class J
{
public static void Main()
{
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = false;
parameters.OutputAssembly = "AutoGen.dll";
CompilerResults r = CodeDomProvider.CreateProvider("CSharp").CompileAssemblyFromSource(parameters, "public class B {public static int k=7;}");
//verify generation
Console.WriteLine(Assembly.LoadFrom("AutoGen.dll").GetType("B").GetField("k").GetValue(null));
}
}
Si vous utilisez 'parameters.GenerateInMemory = true;' vous pouvez obtenir l'assemblage en mémoire avec 'r.CompiledAssembly' –
- 1. Ajouter dynamiquement des valeurs à UIPickerView au moment de l'exécution
- 2. Modifier app.config au moment de l'installation
- 3. Génération Dynamiquement RadioButtonList
- 4. Comment obtenir la valeur de la colonne dynamiquement ajoutée de datagridview au moment de la publication
- 5. Générer une image au moment de l'exécution
- 6. Meilleure façon de définir dynamiquement la couleur du contrôle au moment de l'exécution
- 7. Échec de vérification au moment de l'exécution # 0 loading QueryFullProcessImageName from kernel32.dll
- 8. Duplication de composants au moment de l'exécution
- 9. Y at-il un drapeau devenv pour désactiver la génération pdb au moment de la compilation?
- 10. clignote sur l'écran au moment de l'exécution
- 11. Vues iPhone au moment de l'exécution?
- 12. Commutateur MasterPageFile au moment de l'exécution
- 13. C# Assemblage introuvable au moment de l'exécution
- 14. enregistrer le périphérique au moment de l'exécution
- 15. Choix de l'espace de nom 'using' au moment de l'exécution
- 16. Lecture de l'espace de segment maximal au moment de l'exécution
- 17. Chargement de différents assemblages au moment de la compilation en fonction de la cible de construction
- 18. log4net active la journalisation du débogage au moment de l'exécution
- 19. Une DLL peut-elle être liée à une autre DLL avec une bibliothèque d'importation si la première DLL est liée au moment de l'exécution?
- 20. Modification de LD_LIBRARY_PATH au moment de l'exécution pour ctypes
- 21. Exécution de PublicResXFileCodeGenerator au moment de la compilation
- 22. Valeur de permutation déterminée au moment de l'exécution dans C#
- 23. Désactiver l'effet de zoom CTRL/Roue au moment de l'exécution
- 24. Fichier de ressources modifiable au moment de l'exécution
- 25. Link (? Au hasard) échoue avec DLL de débogage de Visual
- 26. Charger dynamiquement dll dans le luminaire fitnesse
- 27. Ajout de fichiers au chemin de classe java au moment de l'exécution
- 28. Relocalisation ELF au moment du chargement
- 29. Comment vérifier si SqlCacheDependency est activé au moment de l'exécution?
- 30. Tests unitaires avec nez: tests au moment de la compilation?
Note: les anciennes versions de ce code ont une ligne de code supplémentaire qui crée un compilateur du fournisseur en utilisant CSharpCodeProvider.CreateCompiler(). Ceci est obsolète, vous devriez appeler la compilation directement sur le fournisseur. –