.Net 3.5 CodeDom 编译器生成奇怪的错误
这是一个遥远的延伸,但我将尝试尽可能最好地解释这个问题。我正在使用.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)});
当所有这三个文件一起编译时,我收到此错误
Invalid token 'void' in class, struct, or interface member statements
我会假设此错误是指位于以下位置的这行代码ObjectLayer.cs
部分 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 编译器会出现部分空洞的问题吗?
This is a far stretch but i am going to try an explain the issue as best as possible. I am using the CodeDom Compiler in .Net 3.5 to compile 3 cs files...2 of which were generated from Edmgen.exe and 1 is a dynamicly generated file. The compile code looks like this
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)});
When all three of these files are compile together i am getting this error
Invalid token 'void' in class, struct, or interface member declaration
I would assume that this error is referring to the this line of code located in the ObjectLayer.cs
partial void OnIDChanged();
HOWEVER, if these 3 files are included into a new VS2010 project and compiled through that compiler they work fine....this error is only occuring with the CodeDom compiler...it is having some issue with "partial void".
I have found an issue very similar to this here
http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/85e085c8-b6ac-4cae-b59d-7b9ce7758122/
However that fix does not work because i am using the CodeDom Compiler not VS compiler....
I would also like to note that i have tried the .Net 3.5 commandline compiler (csc.exe) and this also worked fine. And i have also tested this exact code under .Net 4 which ALSO works. This issue only seems to come up under .net 3.5
Anyone ever run into this or have an idea why the .Net 3.5 CodeDom compiler would be having an issue with partial voids?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题解决了!
在我看来,这仍然很奇怪,但在 .Net 3.5 下,默认的 CodeDom 编译器想要使用 .Net 2 csc.exe 编译器......这导致与我的 cs 文件发生冲突。
您必须指定编译器版本
该版本解决了我的所有问题。
Issue solved!
This is still very odd in my opinion but under .Net 3.5 the CodeDom compiler by DEFAULT wants to use the .Net 2 csc.exe compiler....this was causing conflicts with my cs files.
YOU MUST SPECIFY COMPILER VERSION
That one lined solved all my issues.