net core Razor 版本 簡單的 RazorEngine 代碼生成工具 Demo


項目版本為 NetCore5.0

新建一個控制台項目

首先 安裝 包 RazorEngine.NetCore

 

固定配置 別問 問就是 就這么敲

var config = new TemplateServiceConfiguration();
            config.Debug = true;
            config.EncodedStringFactory = new RawStringFactory();
            var service = RazorEngineService.Create(config);

然后是 模板文件

using System;

namespace Test.Model
{
public class @(Model.Name)
{
@foreach (var item in Model.Columns)
{
@*@(public {item.pro} {item.Name}{{get;set;}})*@
@($@"
        public {item.Pro} { item.ColumnName} {{ get; set; }}
")
}
}
}

 

讀取模板 生成代碼

 var baseDir = AppDomain.CurrentDomain.BaseDirectory;
            string templateDir = Path.Combine(baseDir, "Templates");
            var files = Directory.GetFiles(templateDir, "*", SearchOption.AllDirectories);
            Dictionary<string, string> templist = new Dictionary<string, string>();
            foreach (var item in files)
            {
                
                templist.Add(Path.GetFileNameWithoutExtension(item) , File.ReadAllText(item));
                
            }
            var entity = new EFTable()
            {
                Name="TestModel",
                Columns=new List<EFColumn>() { 
                 new EFColumn(){ Pro="string",ColumnName="Id" },
                  new EFColumn(){ Pro="string",ColumnName="Name" }

                }
            };
            DataContext ctx = new DataContext();
            foreach (var item in templist)
            {
                var result=service.RunCompile(item.Value,item.Key,null,entity);
            }

  result 就是生成的文本  將文本寫入文件 就達到了直接生成項目文件的目的

 

Model  文件

 public class EFTable
    {
        public string Name { get; set; }

        public List<EFColumn> Columns { get; set; }
        public string Constructor { get; internal set; }
        public object References { get; internal set; }
    }

    public class EFColumn
    {
        public string Name { get; set; }

        public string Pro { get; set; }

        public string Comment { get; set; }

        public string ColumnName { get; set; }

        public bool IsPrimaryKey { get; set; }

        public bool IsNullable { get; set; }

        public int? MaxLength { get; set; }
    }

  

 

 

最后 在寫入文件就好了 
File.WriteAllText(savePath, result);

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM