以下のコードを使用してランタイムコンパイルを正常に実行しています。入力* .csファイルの数が多い場合を除き、次のエラーが発生します。ランタイムC#コードからフォルダ内のすべてのファイルをコンパイル
System.SystemException:実行中のエラーmono.exe:ファイル名または拡張子が長すぎます。
これは、this articleのようなコマンドラインの長さの制限によるものだと思います。プログラムで素晴らしいものだ-recurseを使用して、そのフォルダを渡す方法がある場合は、すべてのソースファイルは、1つのフォルダにあるので、ここで
はコード
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());
です。または、codeProvider.CompileAssemblyFromDirectoryRecursiveのようなフォルダーを取るメソッドもありましたが、それも素晴らしいですが、私の知識には存在しません。
私は以下を試みましたが、うまくいかなかった。コンパイラは/ recurseで指定されたフォルダではなく、fake.csのみを選択します。
parameters.CompilerOptions += " /recurse:" + dir + System.IO.Path.PathSeparator + "*.cs";
results = codeProvider.CompileAssemblyFromFile (parameters, new string[1] { "fake.cs" });
ありがとうございます。