2017-09-21 6 views
1

以下のコードを使用してランタイムコンパイルを正常に実行しています。入力* .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" }); 

ありがとうございます。

答えて

1

私はPathSeparatorをDirectorySeparatorに置き換えただけです。

parameters.CompilerOptions += " /recurse:" + dir + System.IO.Path.DirectorySeparatorChar + "*.cs"; 
関連する問題