Al programar en C# utilizando Visual Studio 2008, a menudo deseo la generación de código "automático". Si es posible, me gustaría lograrlo haciendo que mi archivo de la solución MSBuild llame a Rake, que llamaría al código Ruby para la generación del código, haciendo que los archivos generados resultantes aparezcan automáticamente en mi solución.¿Alguien tiene experiencia en llamar a Rake de MSBuild para conocer el código y otros beneficios? ¿Como le fue? ¿Cuáles son tus pensamientos/recomendaciones?
Aquí hay un ejemplo de negocio (de muchos ejemplos posibles que podría nombrar) donde este tipo de generación de código automático sería útil. En un proyecto reciente tuve una interfaz con algunas propiedades que contenían montos en dólares. Quería una segunda interfaz y una tercera que tuviera las mismas propiedades que la primera, a excepción de que estaban "calificadas" con un nombre de unidad comercial. Algo como esto:
public interface IQuarterlyResults
{
double TotalRevenue { get; set; }
double NetProfit { get; set; }
}
public interface IConsumerQuarterlyResults
{
double ConsumerTotalRevenue { get; set; }
double ConsumerNetProfit { get; set; }
}
public interface ICorporateQuarterResults
{
double CorporateTotalRevenue { get; set; }
double CorporateNetProfit { get; set; }
}
En este ejemplo, hay una "Unidad de Negocios de Consumo" y una "unidad de negocio de las empresas". Cada propiedad en IQuarterlyResults se convierte en una propiedad llamada "Corporate" + [nombre de la propiedad] en ICorporateQuarterlyResults, y asimismo para IConsumerQuarterlyResults.
¿Por qué crear interfaces para estos, en lugar de simplemente tener una instancia de IQuarterlyResults for Consumer y otra instancia para Corporate? Porque, al trabajar con el objeto de calculadora que estaba construyendo, el usuario tuvo que lidiar con cientos de propiedades, y es mucho menos confuso si puede tratar con nombres de propiedades "totalmente calificados" como "ConsumerNetProfit".
Pero no nos empantanemos en este ejemplo. Es solo un ejemplo y no la pregunta principal.
La cuestión principal es la siguiente: Me encanta usar Ruby y ERB para la generación de código, y me encanta el uso de rastrillo para gestionar las dependencias entre tareas. Para resolver el problema anterior, lo que me gustaría hacer es hacer que MSBuild llame a Rake, y hacer que Rake/Ruby lea la lista de propiedades en la interfaz "core" y luego generar el código para hacer que todas las interfaces dependientes y sus propiedades. Esto se dispara cada vez que hago una compilación, porque la pongo en el archivo MSBuild para la solución VS.NET.
¿Alguien ha intentado algo como esto? ¿Cómo te funcionó? ¿Qué ideas puedes compartir sobre pros, contras, consejos para el éxito, etc.?
Gracias!
¿Alguien? Bueller? (Me gusta la respuesta de MikeJ, pero estaba usando Nant en lugar de MsBuild). –