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. Web API零碎知识

    查看EF生成的sql的方法 1.通过在context中设置可以追踪EF[版本必须是6.0或以上]中生成的sql public BookServiceContext() : base("nam ...

  2. Java中书写要注意的地方

    Java的命名规则:以字母.下划线(_)或$符号开头,其后跟任意数目的字母.数字.下划线和$符号.  注意: 数字不能作为标识符的开头: 除了下划线与$符号以外,其余的符号不能使用: 不能使用关键字作 ...

  3. jquery的uploadify上传jsp+servlet

    1.准备材料:下载jquery.uploadify上传js   注意:这个上传在firefox下会出现问题如果你在项目中加了拦截器,因为session会丢失,所以你可以传参的时候带上你所需要的条件,在 ...

  4. window.onload,<body onload="function()">, document.onreadystatechange, httpRequest.onreadystatechang

    部分内容参考:http://www.aspbc.com/tech/showtech.asp?id=1256 在开发的过程中,经常使用window.onload和body onload两种,很少使用do ...

  5. jquery.BannerRotator.js

    项目地址:https://github.com/snipertulip/BannerRotator 演示地址:http://snipertulip.github.io/BannerRotator/de ...

  6. 操作html标签之找到标签

    引入 丰富多彩的html标签构成了网页.例如p,div,li,ul,a......…….它们都有自己默认的样式,且各不一样,例如h1标签就比p标签的margin要大一些.我们学习css的目的是为了改变 ...

  7. javascript的prototype原理理解

    prototype是函数的内置属性,每一个function都拥有这样一个属性,在js的面向对象编程上,prototype发挥着强大的作用. 某天,春哥问我你知道prototype的原理吗?我突然懵了, ...

  8. python——lambda

    一lambda函数基础 1.lambda函数为匿名函数,即没有具体的函数名,而def函数创建的函数有函数名. >>> def foo(): return 'test' #命名为foo ...

  9. FMDB官方使用文档-GCD的使用-提高性能(翻译)

    FMDB官方使用文档-GCD的使用-提高性能(翻译) 发布于:2013-08-19 10:01阅读数:13395 由于FMDB是建立在SQLite的之上的,所以你至少也该把这篇文章从头到尾读一遍.与此 ...

  10. QProcess进程间双向通信

    记得以前写过Linux的C程序, 里面用popen打开一个子进程, 这样可以用read/write和子进程通讯, 而在子进程里则是通过从stdin读和向stdout写实现对父进程的通讯. QProce ...