how to use CompileAssemblyFromSource to generate windows gui exe

  • Thread starter Thread starter sotto
  • Start date Start date
S

sotto

I'm trying to compile some source from within in my c# 2.0 application.

all works fine, but it always generates a windows console executable instead
of a windows gui app.
When i take a look with ildasm at the generated exe it says
..subsystem 0x0003 // WINDOWS_CUI
but i want it to be
..subsystem 0x0002 // WINDOWS_GUI

how can i tell the csharpcodeprovider to build a gui app?
 
I read your post and was kind of curious, so I decided to see what I could
learn.

I hit up the .Net Reflector, and looked at where the CompilerParameters were
converted to the command line args in
Microsoft.CSharp.CSharpCodeGenerator.CmdArgsFromParameters It appears that
it looks at the CommandParameter's GenerateExecutable, and either does /t:exe
or /t:library It doesn't appear there's a way to make it do /t:winexe,
which is what you are looking for.

I dislike any of the solutions I come up with; hopefully others will have a
better solution. The only thought I can come up with is to do something
highly ugly like reflect the whole Microsoft.CSharp namespace and change that
line.... ICK! Look up .Net Reflector by lutz roeder and File Dissassember
attachment for it, if you get that desperate, it may be the lesser of two
evils of writing it all from scratch.

CSharpCodeGenerator, etc. are all internal classes, so you can't inherit
from them, the other option would be to use reflection to call the internal
methods, but none of options sound really good.

Perhaps there's some way you can re-open the assembly, disassemble it, then
resave it with that flag changed.
 
Back
Top