Estoy seguro de que este es un requisito muy extraño, pero aquí va.¿Cómo puedo generar una clase C# descargable desde un sitio web ASP.NET MVC?
Tenemos un código de configuración de cliente que se representa mediante clases de C# que compilamos en una biblioteca de clases. La creación de estas clases de configuración actualmente es un trabajo de mono que me gustaría asignar a alguien que no sea un desarrollador. Por lo tanto, estamos construyendo un sitio web "Configurador" que un analista de negocios puede usar para generar clases de C# válidas completando un formulario con las opciones relevantes seleccionadas.
¿Cuál es la mejor forma de generar una clase C# a partir de una plantilla en un sitio web de MVC? Tenga en cuenta que no estoy hablando aquí de generar dinámicamente y ejecutar una clase en tiempo de ejecución: básicamente estamos generando un archivo de texto que contiene código C# que se incluirá en un proyecto totalmente diferente.
¡Está resultando ser un tema muy difícil de googlear correctamente! Las opciones que han llegado hasta ahora ...
- sólo tiene que utilizar un archivo de texto con token y reemplazar los valores usando String.Format
- alguna manera usar la maquinilla de afeitar como un motor de plantillas (pero no sabe cómo, y no es que html 'generación re)
- alguna manera utilizar plantillas T4 (al menos sé que se utiliza para generar C#, pero no está seguro de cómo ejecutar en tiempo de ejecución)
alguna idea sobre la mejor manera de abordar esto?
Según lo solicitado, aquí hay un ejemplo de la clase/archivo de salida. Los valores aquí anulan los valores establecidos en una clase base con etiquetas, validación específicas del cliente, etc. Así es como personalizamos nuestro producto para los clientes.
public class AreaRiskTemplate: AreaRiskTemplateBase
{
public override string EntityName { get { return "risk"; } }
public override string EntityNamePlural { get { return "risks"; } }
public override string EntityNameArticle { get { return "a"; } }
public override string CGovItemRefPrefix { get { return "R"; } }
public override void SetFieldDefinitions()
{
FieldDefinitions.Level1.IsImplemented = true;
FieldDefinitions.Level1.Label = "Category";
FieldDefinitions.Level1.IsVisibleInGrid = true;
FieldDefinitions.Level2.IsImplemented = true;
FieldDefinitions.Level2.Label = "Team";
FieldDefinitions.Level2.IsVisibleInGrid = true;
FieldDefinitions.Description.IsImplemented = true;
FieldDefinitions.Description.Label = "Description";
FieldDefinitions.Description.IsVisibleInGrid = true;
}
public override ModelStateDictionary Validate()
{
var msd = new ModelStateDictionary();
// add template-specific validation here
msd.Merge(base.Validate());
return msd;
}
public override List<string> Level1Options
{
get
{
return new List<string>
{
"Organisational",
"Financial",
"Operational",
"External",
"IT"
};
}
}
}
Actualizar: actualmente investigando las plantillas T4 en http://msdn.microsoft.com/en-us/library/ee844259(v=vs.100).aspx (gracias a los comentarios más abajo). Parece prometedor.
http://msdn.microsoft.com/en-us/library/bb126445.aspx parece incluir detalles sobre cómo empezar con T4 en tiempo de ejecución. –
Esto también podría ser de interés: http://code.msdn.microsoft.com/windowsdesktop/Single-File-Generator-94d856d4 – Magrangs
¿Puede publicar un ejemplo de cómo se ve este archivo de configuración? –