0

这是一个很长的范围,但我将尝试尽可能地解释这个问题。我正在使用 .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 编译器会出现部分空洞问题?

4

1 回答 1

1

问题解决了!

在我看来这仍然很奇怪,但在 .Net 3.5 下,默认的 CodeDom 编译器想要使用 .Net 2 csc.exe 编译器......这导致与我的 cs 文件发生冲突。

您必须指定编译器版本

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

那一条线解决了我所有的问题。

于 2010-07-22T21:41:00.583 回答