如何从ASP.NET MVC网站中生成可下载的c#类?

cen*_*cru 6 c# asp.net-mvc t4 templates razor

我确信这是一个非常奇怪的要求,但是这里有.

我们有一些客户配置代码,由我们编译成类库的C#类表示.创建这些配置类目前是我想要分配给开发人员以外的人的猴子工作.因此,我们正在构建一个"Configurator"网站,业务分析师可以通过填写包含所选相关选项的表单来生成有效的C#类.

从MVC网站中的模板生成C#类的最佳方法是什么?请注意,我不是在谈论动态生成在运行时执行类:我们实际上生成的文本文件恰好包含将包含在完全不同的项目中的C#代码.

这被证明是谷歌正确的一个非常困难的话题!到目前为止出现的选项......

  • 只需使用标记化的文本文件并使用String.Format替换值
  • 以某种方式使用Razor作为模板引擎(但不确定如何,它不是我们正在生成的HTML)
  • 不知何故使用T4模板(至少我知道它用于生成C#,但不确定如何在运行时执行)

关于如何最好地接近这个的任何想法?

根据要求,这是输出类/文件的示例.此处的值覆盖基类中设置的值,具有客户特定的标签,验证等.这就是我们为客户定制产品的方式.

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"
                };
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:目前正在http://msdn.microsoft.com/en-us/library/ee844259(v=vs.100).aspx上调查T4模板(感谢下面的评论).看起来很有希

Eri*_*sch 1

我建议避免使用该网站,而只需使用 CodeSmith。您可以设计 CodeSmith 脚本,以便它会询问信息,然后生成所需的代码。尽管您必须购买 CodeSmith,但看起来工作量少了很多。