这是一个远方的延伸,但我将尽可能地尝试解释这个问题。我正在使用.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中的代码行

部分void onidchanged();

但是,如果将这3个文件包含在新的VS2010项目中并通过该编译器编译,则它们正常工作....此错误仅与CodeDom编译器一起发生......它与“部分void”有一些问题。 。

我发现了一个非常相似的问题 http://社交.msdn.microsoft.com /论坛/ en-US / LinqProject一般/线/线/ 85E085C8-B6AC-4CAE-B59D-7B9CE7758122 /

但是,这种修复不起作用,因为我使用的代码编译器而不是编译器....

我还要注意,我已经尝试过.NET 3.5 CommandLine Compiler(CSC.exe),这也很好。我还在.NET 4下测试了这个确切的代码.NET 4也有效。这个问题似乎只有.NET 3.5

任何人都遇到过这个或有一个想法为什么.NET 3.5 CodeDom编译器将具有部分缺点的问题?

有帮助吗?

解决方案

问题解决了!

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

必须指定编译器版本

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

一个衬里解决了我的所有问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top