2010-07-22 2 views
0

이 코드는 아주 길지만 가능한 한 최선의 방법으로 문제를 설명하려고합니다. 나는 CodeDom 컴파일러를 .NET 3.5에서 3 cs 파일을 컴파일하는데 사용하고있다. 2 개는 Edmgen.exe에서 생성되었고 1 개는 동적으로 생성 된 파일이다. 컴파일 코드는이.Net 3.5 CodeDom 컴파일러에서 홀수 오류가 발생합니다.

CompilerResults results = compiler.CompileAssemblyFromFileBatch(parameters, new string[]{string.Format("{0}\\Dynamic.cs", Directory.GetCurrentDirectory()), 
       string.Format("{0}\\{1}.ObjectLayer.cs", Directory.GetCurrentDirectory(), ModelName), string.Format("{0}\\{1}.Views.cs", Directory.GetCurrentDirectory(), ModelName)}); 

이러한 파일의 세 가지 내가이 오류를 얻고 함께 컴파일되어

잘못된 토큰 '무효'클래스, 구조체 또는 인터페이스 멤버 선언에

I처럼 보인다 이 오류가 ObjectLayer.cs에있는이 코드 줄을 참조한다고 가정합니다.

부분적인 공백 OnIDChanged();

그러나이 세 파일이 새 VS2010 프로젝트에 포함되어 있고 해당 컴파일러를 통해 컴파일되면 정상적으로 작동합니다.이 오류는 CodeDom 컴파일러에서만 발생합니다 ... "부분적인 void ".

나는이 여기 http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/85e085c8-b6ac-4cae-b59d-7b9ce7758122/

매우 유사 문제를 그러나 내가 컴파일러 대 된 CodeDom 컴파일러를하지 사용하고 있기 때문에 그 수정이 작동하지 않습니다 .... 발견

나는 또한주의 싶습니다 그. NET 3.5 명령 줄 컴파일러 (csc.exe) 시도한 및 또한 잘 작동합니다. 그리고 나는 또한이 정확한 코드를 .NET 4에서 테스트했다. 이 문제는 .net 3.5 밑으로 올 것 같습니다.

누구도이 문제가 발생하거나 .Net 3.5 CodeDom 컴파일러가 부분적인 보이드에 문제가있는 이유를 알고 있습니까?

답변

1

문제가 해결되었습니다.

이것은 여전히 ​​내 생각에 이상하지만 닷넷 3.5에서는 CodeDom 컴파일러가 DEFAULT에서 .Net 2 csc.exe 컴파일러를 사용하려고합니다 .... 이건 내 CS 파일과 충돌을 일으켰습니다. 당신이 줄 지어 하나는 내 모든 문제를 해결

var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } }); 

그건 컴파일러 버전을 지정해야합니다

.

+0

암시 적 변환이 정의 된 구조체에 문자열을 캐스팅하는 중 오류가 발생하는 CodeDom 컴파일러와 비슷한 문제가있었습니다. null to nullable 문자열을 던졌지 만 someStruct 문자열이 제대로 작동했습니다. v3.5를 사용하도록 dom 컴파일러에 알려 줌. –