运行时C#从代码编译文件夹中的所有文件

时间:2017-09-21 23:42:38

标签: c# mono csharpcodeprovider runtime-compilation

我使用下面的代码成功进行运行时编译。除了当输入* .cs文件的数量很大时,我得到以下错误。

  

System.SystemException:运行mono.exe时出错:文件名或扩展名太长。

我认为这是由于this article中的命令行长度限制。

这是代码

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 ());

由于所有源文件都在一个文件夹中,如果有办法以编程方式使用-recurse传递该文件夹将会很棒。或者,如果有一个方法需要一个像codeProvider.CompileAssemblyFromDirectoryRecursive这样的文件夹本来也很棒,但据我所知不存在。

我尝试了以下操作,但它没有用。编译器只选择fake.cs而不是/ recurse指定的文件夹。

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

感谢您提前。

1 个答案:

答案 0 :(得分:1)

我刚用DirectorySeparator替换了PathSeparator,然后就可以了。

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