NFinal代码生成器与其他的代码生成器不太一样,只需要运行模块下的WebComplier.aspx即可生成最终的web层代码。包括数据库的操作,Router类,

调试文件等。附上一段代码与大家分享

using System;
using System.Collections.Generic;
using System.Web;
using System.IO;
using System.Reflection;
using System.Text;
using System.Xml;
using NFinal.Compile; //防止.net 2.0下类自动引入Linq命名空间报错.
namespace System.Linq
{
delegate void None();
}
namespace NFinal
{
public class Frame
{
public static string appRoot;
public static string AssemblyTitle; public static List<NFinal.DB.ConnectionString> ConnectionStrings = new List<NFinal.DB.ConnectionString>(); public Frame(string appRoot)
{
Frame.appRoot = appRoot;
string[] fileNames = Directory.GetFiles(appRoot, "*.csproj");
if (fileNames.Length > )
{
AssemblyTitle = Path.GetFileNameWithoutExtension(fileNames[]);
}
else
{
string temp;
temp = appRoot.Trim('\\');
AssemblyTitle = temp.Substring(temp.LastIndexOf('\\') + );
}
} /// <summary>
/// 把基于网站根目录的绝对路径改为相对路径
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static string MapPath(string url)
{
return appRoot + url.Trim('/').Replace('/', '\\');
} public void GetDB()
{
//获取WebConfig中的连接字符串信息
string configFileName = appRoot + "Web.config";
if (File.Exists(configFileName))
{
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load(configFileName);
System.Xml.XmlNode root = doc.DocumentElement.SelectSingleNode("/configuration");
System.Xml.XmlNodeList nodeList = root.SelectNodes("connectionStrings/add[@connectionString]");
Frame.ConnectionStrings.Clear();
if (nodeList.Count > )
{
System.Xml.XmlElement ele = null;
foreach (System.Xml.XmlNode node in nodeList)
{
ele = node as System.Xml.XmlElement;
var connectionString = new NFinal.DB.ConnectionString();
connectionString.name = ele.Attributes["name"].Value;
connectionString.value = ele.Attributes["connectionString"].Value;
connectionString.provider = ele.Attributes["providerName"].Value; if (connectionString.provider.ToLower().IndexOf("mysql") > -)
{
connectionString.type = NFinal.DB.DBType.MySql;
}
else if (connectionString.provider.ToLower().IndexOf("sqlclient") > -)
{
connectionString.type = NFinal.DB.DBType.SqlServer;
}
else if (connectionString.provider.ToLower().IndexOf("sqlite") > -)
{
connectionString.type = NFinal.DB.DBType.Sqlite;
}
else if (connectionString.provider.ToLower().IndexOf("oracle") > -)
{
connectionString.type = NFinal.DB.DBType.Oracle;
}
else
{
connectionString.type = NFinal.DB.DBType.Unknown;
}
Frame.ConnectionStrings.Add(connectionString);
}
}
}
//读取数据库信息
NFinal.DB.Coding.DataUtility dataUtility = null;
if (Frame.ConnectionStrings.Count > )
{
NFinal.DB.ConnectionString conStr;
NFinal.DB.Coding.DB.DbStore.Clear();
for (int i = ; i < Frame.ConnectionStrings.Count; i++)
{
conStr = Frame.ConnectionStrings[i];
if (conStr.type == NFinal.DB.DBType.MySql)
{
dataUtility = new NFinal.DB.Coding.MySQLDataUtility(conStr.value);
dataUtility.GetAllTables(dataUtility.con.Database);
NFinal.DB.Coding.DB.DbStore.Add(conStr.name, dataUtility);
}
else if (conStr.type == NFinal.DB.DBType.Sqlite)
{
dataUtility = new NFinal.DB.Coding.SQLiteDataUtility(conStr.value);
dataUtility.GetAllTables(dataUtility.con.Database);
NFinal.DB.Coding.DB.DbStore.Add(conStr.name, dataUtility);
}
else if (conStr.type == NFinal.DB.DBType.SqlServer)
{
dataUtility = new NFinal.DB.Coding.SQLDataUtility(conStr.value);
dataUtility.GetAllTables(dataUtility.con.Database);
NFinal.DB.Coding.DB.DbStore.Add(conStr.name, dataUtility);
}
else if (conStr.type == NFinal.DB.DBType.Oracle)
{
#if NET2
#else
dataUtility = new NFinal.DB.Coding.OracleDataUtility(conStr.value);
dataUtility.GetAllTables(dataUtility.con.Database);
NFinal.DB.Coding.DB.DbStore.Add(conStr.name, dataUtility);
#endif
}
}
}
} /// <summary>
/// 创建主路由
/// </summary>
/// <param name="apps"></param>
public void CreateMain(string[] apps)
{
VTemplate.Engine.TemplateDocument doc = null;
doc=new VTemplate.Engine.TemplateDocument(MapPath("NFinal/Template/Main.tpl"), System.Text.Encoding.UTF8);
doc.SetValue("project", NFinal.Frame.AssemblyTitle);
doc.SetValue("apps", apps);
doc.SetValue("ControllerSuffix", "Controller");
doc.RenderTo(MapPath("NFinal/Main.cs"), System.Text.Encoding.UTF8);
} /// <summary>
/// 获取所有的应用模块
/// </summary>
/// <returns></returns>
public string[] GetApps()
{
string webConfigFileName= MapPath("/Web.config");
XmlDocument doc = new XmlDocument();
doc.Load(webConfigFileName);
XmlNode appsNode = doc.DocumentElement.SelectSingleNode("appSettings/add[@key='Apps']");
string[] Apps = null; if (appsNode != null && appsNode.Attributes.Count > && appsNode.Attributes["value"] != null)
{
Apps = appsNode.Attributes["value"].Value.Split(',');
}
else
{
Apps =new string[] {"App"};
}
return Apps;
} } }

NFinal学习笔记 03—代码生成器的更多相关文章

  1. 机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理、源码解析及测试

    机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理.源码解析及测试 关键字:决策树.python.源码解析.测试作者:米仓山下时间:2018-10-2 ...

  2. OpenCV 学习笔记03 边界框、最小矩形区域和最小闭圆的轮廓

    本节代码使用的opencv-python 4.0.1,numpy 1.15.4 + mkl 使用图片为 Mjolnir_Round_Car_Magnet_300x300.jpg 代码如下: impor ...

  3. OpenCV 学习笔记03 findContours函数

    opencv-python   4.0.1 1 函数释义 词义:发现轮廓! 从二进制图像中查找轮廓(Finds contours in a binary image):轮廓是形状分析和物体检测和识别的 ...

  4. C++ GUI Qt4学习笔记03

    C++ GUI Qt4学习笔记03   qtc++spreadsheet文档工具resources 本章介绍创建Spreadsheet应用程序的主窗口 1.子类化QMainWindow 通过子类化QM ...

  5. SaToken学习笔记-03

    SaToken学习笔记-03 如果排版有问题,请点击:传送门 核心思想 所谓权限验证,验证的核心就是一个账号是否拥有一个权限码 有,就让你通过.没有?那么禁止访问! 再往底了说,就是每个账号都会拥有一 ...

  6. Redis:学习笔记-03

    Redis:学习笔记-03 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 7. Redis配置文件 启动 ...

  7. OGG学习笔记03

    OGG学习笔记03-单向复制简单故障处理 环境:参考:OGG学习笔记02-单向复制配置实例实验目的:了解OGG简单故障的基本处理思路. 1. 故障现象故障现象:启动OGG源端的extract进程,da ...

  8. xml基础学习笔记03

    继续上篇xml学习笔记,坚持.坚持.再坚持啊.... 本篇主要记录: 35.XML节点的删除与修改 36集.用XML制作RSS订阅源 <?php /* 笔记: 35.XML节点的删除与修改 使用 ...

  9. OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法

    函数中的代码是部分代码,详细代码在最后 1 cv2.boundingRect 作用:矩形边框(boundingRect),用于计算图像一系列点的外部矩形边界. cv2.boundingRect(arr ...

随机推荐

  1. windows程序消息机制(Winform界面更新有关)--转

    1. Windows程序消息机制 Windows GUI程序是基于消息机制的,有个主线程维护着消息泵.这个消息泵让windows程序生生不息. Windows程序有个消息队列,窗体上的所有消息是这个队 ...

  2. (转).net开发者对android第二周的学习体会

    这一周相对没有春节时这么闲了,白天也比较多的工作要做,每天晚上又要被我三岁的女儿折腾到十点, 实在没有多少时间学习.在前一周的基础上,这周我试着自己练习写了一个个人管理的android的程序,主要实现 ...

  3. Mac_配置adb环境变量

    1.打开终端Terminal. 2.进入HOME目录:命令行输入 echo(这之间有一个空格) $HOME 3.创建.bash_profile文件:命令行输入 touch(这之间有一个空格).bash ...

  4. SQL获取前一天0:00:00至23:59:59数据

    一.前言 因为我公司要做财务结算前一天0:00:00至23:59:59的数据,利用到动态拼接SQL语句 我们需要明白声明DateTime 和 Date 获取的时间格式是不一样的,所以通过此计算有利于得 ...

  5. 修饰器模式(day04)

    修饰器设计模式 --最近我给女朋友买了一款可以更换外壳的手机.现在的外壳是红色的,假如我想用这款手机的时候,会更换成银灰色的外壳.但是我不能随意更换天线或者话筒,因为这些功能模块在手机生产的时候就已经 ...

  6. 初学QML之QML和C++混合方法

    混合使用QML和C++的方法 1加载一个QML组件,然后从 C++对其进行操作: 2直接将一个C++对象及其属性嵌入到QML组件: 3定义一个新的QML元素(通过基于QOject的C++类)并在QML ...

  7. :before与:after伪类的应用

    1.小三角样式

  8. 百度ueditor 上传图片后如何设置样式

    最近项目中遇到一个问题,UEditor上传图片后,在内容展示会修改图片样式.但是表情也是img标签,所以全局修改是有问题的, 所以只能着手修改一下插件的代码. 首先找到图片上传的服务器段文件.这里主要 ...

  9. CSS定义网页滚动条

    (一)滚动条样式主要涉及到如下CSS属性: overflow属性: 检索或设置当对象的内容超过其指定高度及宽度时如何显示内容overflow: auto; 在需要时内容会自动添加滚动条overflow ...

  10. Python读入与写出中文时出现乱码

    解决办法:重置sys模块,设置默认编码方式为utf-8. 在.py文件的开头添加下面两行代码: reload(sys) sys.setdefaultencoding('utf8')