elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Compilando en tiempo de ejecucion (¿make builder?) C#
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Compilando en tiempo de ejecucion (¿make builder?) C#  (Leído 5,838 veces)
Codename!!


Desconectado Desconectado

Mensajes: 883



Ver Perfil
Compilando en tiempo de ejecucion (¿make builder?) C#
« en: 9 Diciembre 2010, 13:38 pm »

Feliz Navidad!!  ;D

Tengo una duda acerca de C# y como podria hacer un builder.

He estado mirando acerca de compilacion en tiempo de ejecucion para poder compilar mi proyecto con las opciones que en ese momento sean oportunas y he encotnrado esto
http://www.digitalcoding.com/Code-Snippets/C-Sharp/C-Code-Snippet-Compile-C-or-VB-source-code-run-time.html  y esto tambien!
http://support.microsoft.com/kb/304655
Que me ha parecido super interesante!
Para el que sea un poco vaguete y no le apetezca mirar las web que he dejado aqui esta lo que hace posible la compilacion en tiempo de ejecucion en un programa:


Código
  1. /// <summary>
  2. /// Function to compile .Net C#/VB source codes at runtime
  3. /// </summary>
  4. /// <param name="_CodeProvider">Base class for compiler provider</param>
  5. /// <param name="_SourceCode">C# or VB source code as a string</param>
  6. /// <param name="_SourceFile">External file containing C# or VB source code</param>
  7. /// <param name="_ExeFile">File path to create external executable file</param>
  8. /// <param name="_AssemblyName">File path to create external assembly file</param>
  9. /// <param name="_ResourceFiles">Required resource files to compile the code</param>
  10. /// <param name="_Errors">String variable to store any errors occurred during the process</param>
  11. /// <returns>Return TRUE if successfully compiled the code, else return FALSE</returns>
  12. private bool CompileCode(System.CodeDom.Compiler.CodeDomProvider _CodeProvider, string _SourceCode, string _SourceFile, string _ExeFile, string _AssemblyName, string[] _ResourceFiles, ref string _Errors)
  13. {
  14.    // set interface for compilation
  15.    System.CodeDom.Compiler.ICodeCompiler _CodeCompiler = _CodeProvider.CreateCompiler();
  16.  
  17.    // Define parameters to invoke a compiler
  18.    System.CodeDom.Compiler.CompilerParameters _CompilerParameters =
  19.        new System.CodeDom.Compiler.CompilerParameters();
  20.  
  21.    if (_ExeFile != null)
  22.    {
  23.        // Set the assembly file name to generate.
  24.        _CompilerParameters.OutputAssembly = _ExeFile;
  25.  
  26.        // Generate an executable instead of a class library.
  27.        _CompilerParameters.GenerateExecutable = true;
  28.        _CompilerParameters.GenerateInMemory = false;
  29.    }
  30.    else if (_AssemblyName != null)
  31.    {
  32.        // Set the assembly file name to generate.
  33.        _CompilerParameters.OutputAssembly = _AssemblyName;
  34.  
  35.        // Generate an executable instead of a class library.
  36.        _CompilerParameters.GenerateExecutable = false;
  37.        _CompilerParameters.GenerateInMemory = false;
  38.    }
  39.    else
  40.    {
  41.        // Generate an executable instead of a class library.
  42.        _CompilerParameters.GenerateExecutable = false;
  43.        _CompilerParameters.GenerateInMemory = true;
  44.    }
  45.  
  46.  
  47.    // Generate debug information.
  48.    //_CompilerParameters.IncludeDebugInformation = true;
  49.  
  50.    // Set the level at which the compiler
  51.    // should start displaying warnings.
  52.    _CompilerParameters.WarningLevel = 3;
  53.  
  54.    // Set whether to treat all warnings as errors.
  55.    _CompilerParameters.TreatWarningsAsErrors = false;
  56.  
  57.    // Set compiler argument to optimize output.
  58.    _CompilerParameters.CompilerOptions = "/optimize";
  59.  
  60.    // Set a temporary files collection.
  61.    // The TempFileCollection stores the temporary files
  62.    // generated during a build in the current directory,
  63.    // and does not delete them after compilation.
  64.    _CompilerParameters.TempFiles = new System.CodeDom.Compiler.TempFileCollection(".", true);
  65.  
  66.    if (_ResourceFiles != null && _ResourceFiles.Length > 0)
  67.        foreach (string _ResourceFile in _ResourceFiles)
  68.        {
  69.            // Set the embedded resource file of the assembly.
  70.            _CompilerParameters.EmbeddedResources.Add(_ResourceFile);
  71.        }
  72.  
  73.  
  74.    try
  75.    {
  76.        // Invoke compilation
  77.        System.CodeDom.Compiler.CompilerResults _CompilerResults = null;
  78.  
  79.        if (_SourceFile != null && System.IO.File.Exists(_SourceFile))
  80.            // soruce code in external file
  81.            _CompilerResults = _CodeCompiler.CompileAssemblyFromFile(_CompilerParameters, _SourceFile);
  82.        else                              
  83.            // source code pass as a string
  84.            _CompilerResults = _CodeCompiler.CompileAssemblyFromSource(_CompilerParameters, _SourceCode);                                                
  85.  
  86.        if (_CompilerResults.Errors.Count > 0)
  87.        {
  88.            // Return compilation errors
  89.            _Errors = "";
  90.            foreach (System.CodeDom.Compiler.CompilerError CompErr in _CompilerResults.Errors)
  91.            {
  92. _Errors += "Line number " + CompErr.Line +
  93.                            ", Error Number: " + CompErr.ErrorNumber +
  94.                            ", '" + CompErr.ErrorText + ";\r\n\r\n";
  95.            }
  96.  
  97.            // Return the results of compilation - Failed
  98.            return false;
  99.        }
  100.        else
  101.        {
  102.            // no compile errors
  103.            _Errors = null;
  104.        }
  105.    }
  106.    catch (Exception _Exception)
  107.    {
  108.        // Error occurred when trying to compile the code
  109.        _Errors = _Exception.Message;
  110.        return false;
  111.    }
  112.  
  113.    // Return the results of compilation - Success
  114.    return true;
  115. }
  116.  


Código
  1. string _Errors = "";
  2.  
  3. // C# source code pass as a string
  4. string _CSharpSourceCode = @"
  5.            using System;
  6.  
  7.            namespace test
  8.            {
  9.                class Program
  10.                {
  11.                    static void Main(string[] args)
  12.                    {
  13.                        Console.WriteLine(""Press ENTER key to start ..."");
  14.                        Console.ReadLine();
  15.                        for (int c=0; c<=100; c++)
  16.                            Console.WriteLine(c.ToString());
  17.                    }
  18.                }
  19.            }";
  20.  
  21.  
  22. // Compile C-Sharp code
  23. if (CompileCode(new Microsoft.CSharp.CSharpCodeProvider(), _CSharpSourceCode, null, "c:\\temp\\C-Sharp-test.exe", null, null, ref _Errors))
  24.    Console.WriteLine("Code compiled successfully");
  25. else
  26.    Console.WriteLine("Error occurred during compilation : \r\n" + _Errors);
  27.  
De modo que veo que con System.CodeDom y algo mas se puede compilar el codigo que tu le introduces a modo de una variable string.

Mi problema es que quiero compilar un proyecto entero de c# con sus librerias y referencias.. porsupuesto en una string es impensable!
Como podria hacer para generar un exe con unas opciones y caracteristicas que yo le ponga a partir de otro exe??
vamos un builder de toda la vida xd


« Última modificación: 9 Diciembre 2010, 17:43 pm por [D4N93R] » En línea

No te dejes mover por las masas, se tu mismo.




raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Compilando en tiempo de ejecucion (¿make builder?) C#
« Respuesta #1 en: 9 Diciembre 2010, 14:23 pm »

Tal vez esto te sirva

Compilacion personalizada en tiempo de ejecucion C#.net

:)


En línea

Codename!!


Desconectado Desconectado

Mensajes: 883



Ver Perfil
Re: Compilando en tiempo de ejecucion (¿make builder?) C#
« Respuesta #2 en: 9 Diciembre 2010, 21:22 pm »

Respuesta sublime.

 ;D ;-)
En línea

No te dejes mover por las masas, se tu mismo.




Codename!!


Desconectado Desconectado

Mensajes: 883



Ver Perfil
Re: Compilando en tiempo de ejecucion (¿make builder?) C#
« Respuesta #3 en: 9 Diciembre 2010, 22:11 pm »

Aunque tengo una duda!

si yo lo que quiero es pasar todo un proyecto?

y en este proyecto tiene varias clases y demas?

pongo la clase principal o como???

he probado a ponerlo como referencias del compilador, pero me da error y se me cierra el programa

Código:
 // Instanciamos un compilador
            CompilerParameters cp = new CompilerParameters();
            cp.ReferencedAssemblies.Add("system.dll");
            cp.ReferencedAssemblies.Add("system.windows.forms.dll");
            cp.ReferencedAssemblies.Add("cliente.Ayudas");
            cp.ReferencedAssemblies.Add("System.Collections.dll");

asi con todas las clases y paquetes de los que dependa?
En línea

No te dejes mover por las masas, se tu mismo.




raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Compilando en tiempo de ejecucion (¿make builder?) C#
« Respuesta #4 en: 9 Diciembre 2010, 23:47 pm »

Con todas las clases no, con todos los assemblies (dll) de los que dependa (si no tiene ruta, sera tomado como que esta en la ruta del sistema o en la variable PATH)

En cuanto a los archivos, ni idea, me mataste :xD
En línea

Codename!!


Desconectado Desconectado

Mensajes: 883



Ver Perfil
Re: Compilando en tiempo de ejecucion (¿make builder?) C#
« Respuesta #5 en: 10 Diciembre 2010, 14:09 pm »

vaya xddd
En línea

No te dejes mover por las masas, se tu mismo.




Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
error 458 en tiempo de ejecucion
Programación Visual Basic
wACtOr 0 3,156 Último mensaje 18 Junio 2007, 16:20 pm
por wACtOr
tiempo de ejecucion « 1 2 »
Programación C/C++
mapers 11 13,562 Último mensaje 26 Junio 2010, 15:37 pm
por cbug
tiempo de ejecucion!!!
Programación General
mapers 3 3,676 Último mensaje 28 Agosto 2010, 09:00 am
por Littlehorse
Compilando en Builder C++
Programación C/C++
GRCH 0 1,476 Último mensaje 4 Septiembre 2012, 18:48 pm
por GRCH
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines