[Mono-dev] CodeDomProvider.CreateProvider fails on Windows

Frank Fuchs fk.fuchs at googlemail.com
Thu Jul 29 03:25:44 EDT 2010


I'd like to compile .cs files at runtime. Following the tip frome here
http://lists.ximian.com/pipermail/mono-devel-list/2010-July/035505.html I'm
able to do that on my Mac. On Windows (win 7 enterprise) however I do not
manage to get it running.
The program exits with exit code 01 right when calling
CodeDomProvider.CreateProvider("C#"). I'm using mono in a relocated setup
(no admin rights on the windows machine).
Strangely the program executes well when I call the assembly with mono from
command line, but fails when calling it from the embedding c++ application
(other calls from this app work well on windows and the mac). Sadly I do not
get any output apart form the exit code, even when using gdb.
Am I missing any initializations? Do I need to tell the program where the
compiler is?


using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using System.CodeDom.Compiler;
using System.Reflection;
namespace MonoCSharpCompiler
    class Compiler
        public static void Main ()
            string[] rFileNames=new string[2];
            CodeDomProvider provider = CodeDomProvider.CreateProvider
("C#");  // <<<==== IT FAILS HERE
            CompilerParameters parms = new CompilerParameters ();
            parms.GenerateExecutable = true;
            parms.OutputAssembly =
            CompilerResults cr=provider.CompileAssemblyFromFile(parms,

            // If errors occurred during compilation, output the compiler
output and errors.
            Console.WriteLine( "Compiler returned with result code: " +
cr.NativeCompilerReturnValue.ToString() );
            foreach ( Object obj in cr.Output )
                 Console.WriteLine( ">{0}", obj );
            if( cr.Errors.Count > 0 )
                for( int i=0; i<cr.Errors.Count; i++ )
                    Console.WriteLine( i.ToString() + ": " +
cr.Errors[i].ToString() );
                // Display information about the compiler's exit code and
the generated assembly.
                Console.WriteLine( "Generated assembly name: " +
cr.CompiledAssembly.FullName );
                if( cr.PathToAssembly == null )
                    Console.WriteLine( "The assembly has been generated in
memory." );
                    Console.WriteLine( "Path to assembly: " +
cr.PathToAssembly );
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-devel-list/attachments/20100729/eb65c577/attachment.html 

More information about the Mono-devel-list mailing list