这是一个很大的延伸,但我会尝试尽可能地解释这个问题。我在.Net 3.5中使用CodeDom编译器来编译3个cs文件...其中2个是从Edmgen.exe生成的,1个是动态生成的文件。编译代码如下所示
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)});
当所有这三个文件一起编译时,我收到此错误
类,结构或接口成员声明中的标记'void'无效
我认为这个错误是指ObjectLayer.cs中的这行代码
部分无效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编译器为什么会出现部分空洞问题?
答案 0 :(得分:1)
问题解决了!
在我看来,这仍然很奇怪,但在.Net 3.5下,DEFAULT的CodeDom编译器想要使用.Net 2 csc.exe编译器....这导致了我的cs文件冲突。
您必须指定编译器版本
var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
那个问题解决了我所有的问题。