2017-05-12 5 views
-1

런타임시 하나의 실행 파일로 여러 C# 파일을 컴파일하려고하는데 Visual에서이 코드를 실행하면 컴파일러 오류가 계속 발생합니다. 사진관.C# - 런타임에 C# 코드를 컴파일하면 "존재하지 않는"오류가 발생합니다.

런타임 컴파일러에서 얻는 특정 오류는 "예상"이고 "메서드에는 반환 형식이 있어야합니다"라는 줄이 7 줄의 'Program.cs'에 있습니다. 분명히, 고칠 것이 있다면 이것들을 고칠 것입니다.

그래서 코드. 여기에 실제 컴파일러 코드는 다음과 같습니다 (일부 제거하여,보고 실제 오류 등) 여기

private CSharpCodeProvider provider = new CSharpCodeProvider(); 
private CompilerParameters parameters = new CompilerParameters(); 

private void RunOption_Click(object sender, RoutedEventArgs e) 
{ 
    parameters.GenerateInMemory = false; 
    parameters.GenerateExecutable = true; 
    parameters.OutputAssembly = Path + "/builds/debug/bot.exe"; 
    parameters.ReferencedAssemblies.Add("System.dll"); 
    parameters.ReferencedAssemblies.Add("System.Threading.Tasks.dll"); 
    parameters.CompilerOptions = "/optimize"; 
    parameters.WarningLevel = 3; 
    parameters.TreatWarningsAsErrors = false; 

    string[] filesToCompile = Directory.GetFiles(Path + "\\src\\", "*.cs"); 

    CompilerResults results = provider.CompileAssemblyFromFile(parameters, filesToCompile); 
} 

그리고 그것을 컴파일하려고 두 개의 파일입니다.

Program.cs

using System.Threading.Tasks; 

namespace MyBot 
{ 
    class Program 
    { 
     static void Main(string[] args) => new MyBot().RunAsync().GetAwaiter().GetResult(); 
    } 
} 

MyBot.cs

using System; 
using System.Threading.Tasks; 

namespace MyBot 
{ 
    public class MyBot 
    {  
     public async Task RunAsync() 
     { 
      Console.Title = "MyBot"; 
      Console.Read(); 
     } 
    } 
} 

내가 무슨 말이냐? 언급했듯이 Visual Studio에서 'Program.cs'및 'MyBot.cs'의 코드를 실행하면 모든 것이 올바르게 작동하므로 실제 코드에는 오류가 없습니다.

답변

0

에릭 리 퍼트 (Eric Lippert)는 컴파일러보다 새로운 .NET 버전을 사용하고 있다고 지적했습니다. 그래서 저는 C# 6을 지원하는 새로운 Roslyn 컴파일러로 컴파일러를 변경했습니다. 그래서 교훈을 얻었습니다 : 항상 올바른 프레임 워크 버전을 목표로 삼아야합니다.

OLD 답변

Welp, 나는 나 자신을 다시 한번 바보 선언거야. 다른 사람이하기 전에 직접 해보는 것이 좋습니다.

Program.cs 파일을 변경하여 작동 시켰습니다. 대신

static void Main(string[] args) => new MyBot().RunAsync().GetAwaiter().GetResult(); 

나는

static void Main(string[] args) 
{ 
    new MyBot().RunAsync().GetAwaiter().GetResult(); 
} 

을했다하지만 난 여전히 비주얼 스튜디오에서 일 이후 첫 번째 장소에서 작동하지 않는 이유를 모르겠어요.

+0

컴파일하고있는 다른 환경에서 Visual Studio와 C#의 이전 버전에서 C# 7을 사용하고 있습니다. –

+0

@EricLippert 예, 좀 더 명확 해 졌을 때가되었습니다. .NET 4.6+ 코드를 실행해야하지만 컴파일러가 목표를 달성 할 수없는 것처럼 보입니다. 더 많은 연구가 필요합니다. – Hertzole