2013-03-18 3 views
0

런타임시 C# 코드를 실행하려면 Roslyn을 사용하고 있습니다.Roslyn을 사용하여 외부 파일에서 코드 실행

먼저 내가 (잘 작동)이 코드를 시도 : 그 후

engine.Execute(@"System.Console.WriteLine(""Hello World"");"); 

을, 나는 텍스트 파일에서 코드를 실행하고 싶었다, 그래서 나는이 한 :

string line; 

System.IO.StreamReader file = new System.IO.StreamReader("test.txt"); 
while ((line = file.ReadLine()) != null) 
{ 
    engine.Execute(line); 
} 

나는 복사를 test.txt라는 외부 파일에서 이전에 사용한 문자열.

코드 를 compliling @"System.Console.Write(""Hello World"");" 내가없는 뭔가 오류를 얻을 :

그래서 내 TEST.TXT은 다음 줄이 포함되어 있습니다.

그래서 알아 냈습니다. 그냥 백 슬래시였습니다.

그리고

이에 대한 코드 변경 :이 코드를 실행하면 이제

string line; 

System.IO.StreamReader file = new System.IO.StreamReader("test.txt"); 
while ((line = file.ReadLine()) != null) 
{ 
    string toto = line; 
    string titi = toto.Replace(@"\\", @""); 

    engine.Execute(toto); 
} 

아무것도 (오류)를 발생하지 않습니다.

toto : "@\"System.Console.Write(\"\"Hello World\"\");\""

titi : "@\"System.Console.Write(\"\"Hello World\"\");\""

정상인가요 : 나는 변수의 내용을 검사 할 때

는, 나는이 얻을! 일반적으로 baskslash는 제거해야하지만 그렇지 않은 경우입니다. 문제 내가 코드 로슬린에 패스포트 정확한 문자열을 유지하기 위해, 그래서 변화와 같은 답변을 파일의 문자열을하지 않는 것이 좋습니다 원하는

EDIT

에게 무엇

. 다른 솔루션을 제발!

+0

이 코드를 파일 'System.Console.Write ("Hello World");'에 넣어보십시오. 잘 작동해야합니다. –

+0

무엇을 의미합니까? 나는 그것에 대해 결코 들었다! –

+0

파일에서 문자열을 이스케이프 할 필요가 없습니다. StreamReader가 대신 해줍니다. 내 편집 된 댓글처럼 입력하십시오. –

답변

7

문자열을 오해하고 있습니다.

@"..."문자열 리터럴입니다. 값이 ... 인 문자열을 만듭니다. 당신이 Execute(@"System.Console.WriteLine(""Hello World"");")를 작성할 때 파일에서 문자열을 읽을 때

따라서, 당신은 Execute()에 전달 실제 값이 System.Console.WriteLine("Hello World");

, 당신은 문자열의 실제 가치를 얻을.
StreamReader은 파일에 C# 문자열 리터럴식이 포함되어 있다고 가정하지 않습니다 (매우 이상하고 예기치 않으며 쓸모가 없습니다).

따라서 @"System.Console.WriteLine(""Hello World"");" 텍스트가 포함 된 파일을 읽을 때 실제 값이 @"System.Console.WriteLine(""Hello World"");" 인 문자열이 표시됩니다.
당신이 다음 로슬린의 Execute() 방법에 해당 문자열을 전달하는 경우

(문자열 리터럴이 작성, 당신은 @"@""System.Console.WriteLine(""""Hello World"""");""""를 작성해야합니다), 로슬린 문자열 리터럴 표현식을 평가하고, 문자의 문자열 값을 반환합니다.

관련 문제