views:

21

answers:

1

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?

+1  A: 

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

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

That one lined solved all my issues.

Matthew McDonald
I had a similar problem with the CodeDom compiler throwing errors casting a string to a struct that had an implicit conversion defined.string to Nullable<someStruct> threw errors, but string to someStruct worked fine.Telling the dom compiler to use v3.5 worked.
Josh Sterling