2017-09-21 5 views
1

Je compile avec succès le code ci-dessous. Sauf que lorsque le nombre de fichiers d'entrée * .cs est grand, j'obtiens l'erreur suivante. System.SystemException: Erreur lors de l'exécution de mono.exe: le nom de fichier ou l'extension est trop long. Je crois que cela est dû à la limite de longueur de la ligne de commande comme this article.Runtime C# Compiler tous les fichiers d'un dossier à partir du code

Voici le code

var codeProvider = new CSharpCodeProvider (
        new Dictionary<string, string> { { "CompilerVersion", "v4.0" } }); 

string EngineOutput = Path.GetFileName(dir) + ".dll"; 

parameters.GenerateExecutable = false; 
parameters.OutputAssembly = EngineOutput; 

CompilerResults results = codeProvider.CompileAssemblyFromFile (parameters, engineFiles.ToArray()); 

Comme tous les fichiers source sont dans un dossier, s'il y a un moyen de transmettre ce dossier en utilisant la -recurse sera programmation grand. Ou s'il y avait une méthode qui prend un dossier comme codeProvider.CompileAssemblyFromDirectoryRecursive qui aurait aussi été génial, mais à ma connaissance cela n'existe pas.

J'ai essayé ce qui suit, mais cela n'a pas fonctionné. Le compilateur ne choisit que fake.cs et pas le dossier spécifié par/recurse.

parameters.CompilerOptions += " /recurse:" + dir + System.IO.Path.PathSeparator + "*.cs"; 
results = codeProvider.CompileAssemblyFromFile (parameters, new string[1] { "fake.cs" }); 

Merci d'avance.

Répondre

1

Je viens de remplacer PathSeparator par DirectorySeparator, puis cela fonctionne.

parameters.CompilerOptions += " /recurse:" + dir + System.IO.Path.DirectorySeparatorChar + "*.cs";