2017-09-21 6 views
1

아래 코드를 사용하여 런타임 컴파일을 성공적으로 수행하고 있습니다. 입력 * .cs 파일의 수가 클 경우를 제외하고 다음 오류가 발생합니다.런타임 C# 코드에서 폴더의 모든 파일 컴파일

System.SystemException : error running mono.exe : 파일 이름 또는 확장명이 너무 깁니다.

저는 이것이 명령 줄 길이 제한이 this article 인 것으로 생각합니다.

여기에 프로그램 좋을 것 -recurse를 사용하여 해당 폴더를 통과 할 수있는 방법이 있다면 모든 소스 파일을 한 폴더에 있기 때문에 코드

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"; 
관련 문제