Hola a todos este es mi primer aporte a elhacker.net, no me habia dado cuenta del nivel de esta comunidad, bueno, lo que hice es una dll la cual se puede reutilizar la q permite compilar batchs a exe, solo es una aplicacion de consola, pero puede ser extendida facilmente a winforms o lo q se les ocurra espero que les guste. El articulo completo esta en mi blog.
http://donkeysharp.blogspot.com/2011/04/creando-un-compilador-de-batchs.html
Codigo fuente:
http://cid-a9fbcf65213bf348.office.live.com/self.aspx/.Public/%5BSOURCE%5D%20-%20BatCompiler.zip
Para hacer esto me base en otra entrada en la que utilizo los servicios de compilacion de .NET y con un poco de creatividad me salio el de batchs.
Para compilar codigo C# simplemente se sigue mas o menos la logica de este metodo:
public static StringBuilder CompileFromSourceCode(string outputName, string sourceCode, bool generateExecutable) {
StringBuilder errores = null;
/* Creamos un proveedor de codigo con el cual
* podemos realizar distintas operaciones sobre
* algun codigo C-Sharp, una de estas tareas es
* la de compilar ensamblados.
*/
CSharpCodeProvider provider
= new CSharpCodeProvider
();
/* Para este ejemplo se usa el metodo para compilar
* desde algun código.
* # provider.CompileAssemblyFromSource(...)
*/
// Para eso necesitamos algunos parametros de compilacion
CompilerParameters parameters
= new CompilerParameters
();
// Decimos que el ensamblado sera ejecutable
// caso contrario seria una DLL
parameters.GenerateExecutable = generateExecutable;
/* Ahora necesitamos adicionar un ensamblado
* como es un ejemplo basico solo utilizaremos
* el assembly System.dll
*/
parameters.ReferencedAssemblies.Add("System.dll");
// Establecemos el nombre del ensamblado de salida
parameters.OutputAssembly = outputName;
// Compilamos el codigo fuente
CompilerResults results = provider.CompileAssemblyFromSource(parameters, sourceCode);
// En el caso de que existan errores los mostramos
// caso contrario el ensamblado ha sido construido
if (results.Errors.Count > 0) {
errores
= new StringBuilder
(); foreach (CompilerError error in results.Errors) {
errores.AppendLine(string.Format("Error en linea: {0}", error.Line));
errores.AppendLine("\t" + error.ErrorText);
}
}
return errores;
}
Espero les sea util
Saludos