NFinal学习笔记 03—代码生成器
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—代码生成器的更多相关文章
- 机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理、源码解析及测试
机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理.源码解析及测试 关键字:决策树.python.源码解析.测试作者:米仓山下时间:2018-10-2 ...
- OpenCV 学习笔记03 边界框、最小矩形区域和最小闭圆的轮廓
本节代码使用的opencv-python 4.0.1,numpy 1.15.4 + mkl 使用图片为 Mjolnir_Round_Car_Magnet_300x300.jpg 代码如下: impor ...
- OpenCV 学习笔记03 findContours函数
opencv-python 4.0.1 1 函数释义 词义:发现轮廓! 从二进制图像中查找轮廓(Finds contours in a binary image):轮廓是形状分析和物体检测和识别的 ...
- C++ GUI Qt4学习笔记03
C++ GUI Qt4学习笔记03 qtc++spreadsheet文档工具resources 本章介绍创建Spreadsheet应用程序的主窗口 1.子类化QMainWindow 通过子类化QM ...
- SaToken学习笔记-03
SaToken学习笔记-03 如果排版有问题,请点击:传送门 核心思想 所谓权限验证,验证的核心就是一个账号是否拥有一个权限码 有,就让你通过.没有?那么禁止访问! 再往底了说,就是每个账号都会拥有一 ...
- Redis:学习笔记-03
Redis:学习笔记-03 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 7. Redis配置文件 启动 ...
- OGG学习笔记03
OGG学习笔记03-单向复制简单故障处理 环境:参考:OGG学习笔记02-单向复制配置实例实验目的:了解OGG简单故障的基本处理思路. 1. 故障现象故障现象:启动OGG源端的extract进程,da ...
- xml基础学习笔记03
继续上篇xml学习笔记,坚持.坚持.再坚持啊.... 本篇主要记录: 35.XML节点的删除与修改 36集.用XML制作RSS订阅源 <?php /* 笔记: 35.XML节点的删除与修改 使用 ...
- OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法
函数中的代码是部分代码,详细代码在最后 1 cv2.boundingRect 作用:矩形边框(boundingRect),用于计算图像一系列点的外部矩形边界. cv2.boundingRect(arr ...
随机推荐
- 介绍 Visifire 常用属性的设置
转载自http://www.cnblogs.com/xinyus/p/3422198.html 主要介绍 Visifire 常用属性的设置,用来生成不同样式的图例 设置Chart的属 //设置titl ...
- silverlight+wcf 获得web参数
可以由wcf直接得到参数 ,具体代码如下: using System;using System.Linq;using System.Runtime.Serialization;using System ...
- arm汇编(c内嵌汇编及c和汇编互调)
C语言编译成汇编: arm-linux-gcc -S test.c -o test.S C语言编译成可执行文件: arm-linux-gcc test.c -o test 多个文件编译链接: arm- ...
- CSSOM视图模式
相关技术文章: CSSOM视图模式(CSSOM View Module)相关整理 W3C CSSOM View Module
- 常用js代码整理、收集
个人整理了一下个人常用到的一些js代码,以方便学习以及日后使用,或许有一些是个人之前从网上摘下来的,但是不记得是具体从哪里来的了,如果你看到有一段代码跟你的文章很相似甚至一样,请不要气愤,请告诉我,我 ...
- sqlserver2008 case when then else end
在写sql语句的时候,有时候我们需要对字段的只进行判断计算.查看了下相关文档在sql2012.sql2014里边可以使用 IIF 函数直接完成. 但是现在我需要在sql2008版本中完成最字段的计算 ...
- 介绍一个成功的 Git 分支模型 Release 分支
英文原文: http://nvie.com/posts/a-successful-git-branching-model/ 中文版: 在这篇文章中,我提出一个开发模型.我已经将这个开发模型引入到我所有 ...
- [POJ] 3461 Oulipo [KMP算法]
Oulipo Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 23667 Accepted: 9492 Descripti ...
- BZOJ 1063 道路设计NOI2008
http://www.lydsy.com/JudgeOnline/problem.php?id=1063 题意:给你一棵树,也有可能是不连通的,把树分成几个链,求每个点到根经过的最大链数最小,而且要输 ...
- PowerShell中的输出
1 输出重定向 > 或者>> 2 输出控制 out-* -paging#分页输出 get-process | out-host -paging more指令用于屏显 get-pro ...