2010-07-22 70 views
0

這是一個遠伸,但我會嘗試一個儘可能地解釋這個問題。我在.Net 3.5中使用CodeDom編譯器來編譯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)}); 

當所有這三個文件都編在一起,我收到此錯誤

無效令牌「無效」類,結構或接口成員聲明

我假設這個錯誤指的是位於ObjectLayer.cs中的這一行代碼

partial void OnIDChanged();然而,如果這3個文件被包含到一個新的VS2010項目中,並通過該編譯器編譯,他們工作得很好......這個錯誤只發生在CodeDom編譯器中......它有一些問題「部分無效」。

我發現非常相似,這在這裏 http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/85e085c8-b6ac-4cae-b59d-7b9ce7758122/

一個問題,但是因爲我使用CodeDOM的編譯器不VS編譯器,修復不起作用....

我也想指出我已經嘗試.net 3.5命令行編譯器(csc.exe),這也工作得很好。而且我還測試了.Net 4下的這個確切的代碼,它也適用。這個問題似乎只是出現在.net 3.5

任何人都會遇到這個問題或有一個想法爲什麼.net 3.5 CodeDom編譯器會有部分空洞的問題?

回答

1

問題解決了!

這在我看來還是很奇怪,但在.Net 3.5下,由DEFAULT編譯的CodeDom想要使用.Net 2 csc.exe編譯器......這與我的cs文件有衝突。

必須指定編譯器版本

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

那一個內襯解決了我的所有問題。

+0

我有一個類似的問題與編譯器的CodeDOM引發錯誤鑄造字符串的結構是有定義的隱式轉換。 字符串以可爲空投擲錯誤,但字符串someStruct工作正常。 告訴dom編譯器使用v3.5工作。 – 2010-08-18 16:35:18