仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 749|回复: 9
打印 上一主题 下一主题

[学习教程] NET网页编程之使用add-in扩大性将代码天生器集成到VS情况中(二)-创立Add-In项目 ...

[复制链接]
飘灵儿 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:20:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
C#中有两处地方用到new关键字,第一处也是最常见的一处是用在调用构造函数的时候,这种情况也是大家见的最多的一种。另一处是用在派生类中,作用有隐藏成员,切断继承关系等,相信第二处的用法大家明显要比第一处生疏。上一章次要讲了这个插件的操纵界面与功效,这一章我们入手下手解说怎样完成该插件。

创立Add-In项目
翻开VS,创立新项目->选择别的项目范例->VisualStudio外接程序。以下图:


断定,下一步直到完成,注重在第四页的时分修正一下默许值,以下图:


在项目创立完成后,VS将会主动天生一个Connect.cs文件。该文件包括良多个办法,分离为插件在分歧性命周期将会触发的办法。这里我们只必要存眷Exec办法就能够了,这个办法是我们在挪用该插件时将会实行的办法。在这个文件,我们还必要也许懂得一下DTE2接口,由于我们必要将主动天生的_ApplicationObject工具付与一会我们将要创立的WinForm窗体。DTE2接口在MSDN中的注释是:VisualStudio主动化工具模子中的顶级工具,它承继自DTE接口,而DTE工具暗示VisualStudio集成开辟情况(IDE),这里我们就了解为它就是我们的IDE情况了。

源码解说
接着我们在项目中新建一个WinForm窗体TableConfig。由于在该窗体中必要对宿主项目举行操纵,以是我们必需创立一个DTE2工具,并在Connect.cs文件中将_ApplicationObject工具赋给它。代码以下:
publicpartialclassTableConfig:Form
{
publicTableConfig()
{
InitializeComponent();
}

publicDTE2DTEObject
{
get;
set;
}
}

然后改写Connect.cs中的Exec办法以下:
publicvoidExec(stringcommandName,vsCommandExecOptionexecuteOption,refobjectvarIn,refobjectvarOut,refboolhandled)
{
handled=false;
if(executeOption==vsCommandExecOption.vsCommandExecOptionDoDefault)
{
if(commandName=="CreateCode.Connect.CreateCode")
{
TableConfigform=newTableConfig();
form.DTEObject=_ApplicationObject;
form.ShowDialog();
handled=true;
return;
}
}
}

依照上一章的界面先容,将所需的控件拖到WinForm窗体中。WinForm窗体的cs文件代码人人能够在源码中检察,没有甚么出格的中央。这里就不讲了。

终极的源文件以下图所示,我们逐一解说一下。


1、Common.cs的源码以下:
//猎取表或视图的列布局
publicDataTableGetTableFrame(stringtablename)
{
stringsql=@"selectrow_number()over(orderbycolumn_idasc)asID,A.is_computedasiscomputed,A.is_identityasisidentity,
A.nameascolumnname,B.namecolumntype,A.max_lengthascolumnlength
fromsys.columnsA
leftjoinsys.typesBonA.system_type_id=B.system_type_id
whereobject_id=object_id("+tablename+")";
returndbhelpsql.GetData(sql);
}

//猎取表的主键信息
publicDataTableGetTableKeys(stringtablename)
{
stringsql=@"selecto.nameastablename,c.nameascolumnname,d.nameascolumntype,c.max_lengthascolumnlength
fromsys.indexesi
joinsys.sysindexkeyskoni.object_id=k.idandi.index_id=k.indid
joinsys.objectsooni.object_id=o.object_id
joinsys.columnsconi.object_id=c.object_idandk.colid=c.column_id
joinsys.typesdonc.system_type_id=d.system_type_id
whereo.type=u
andexists(select1fromsysobjectswherextype=PKandname=i.name)
ando.name="+tablename+"orderbyk.colidasc";
returndbhelpsql.GetData(sql);
}

这两个办法次要是用来猎取指表的布局信息,假如有看不懂的中央,请考参sql目次视图来了解。

2、CreateFile.cs的源码以下:
publicclassCreateFile
{
//代表整合式开辟情况(IDE)中一切的项目和合用全部计划的属性
Solution3solu;

publicCreateFile(Solution3_solu)
{
this.solu=_solu;
}

publicvoidCreateItem(stringItemName,stringFolder,stringfileName)
{
//获得计划中今朝项目标汇合
Projectsprojects=solu.Projects;
foreach(Projectpiinprojects)
{
if(pi.Name==ItemName)
{
//ProjectItem暗示项目中的项
foreach(ProjectItempinpi.ProjectItems)
{
if(p.Name==Folder)
{
//GetProjectItemTemplate传回指定项目项目范本的路径(范本称号,用以撰写范本的言语)
//这里的Class.zip与CSharp是vs自带的class类项目模板
stringtemplatePath=solu.GetProjectItemTemplate("Class.zip","CSharp");

//AddFromTemplate(FileName,Name)在现有项模板文件中创立一个新项目项并将其增加到项目中(模板项目文件的完全路径和文件名,新项目项的文件名)
p.ProjectItems.AddFromTemplate(templatePath,fileName+".cs");

break;
}
}
}
}
}
}

CreateItem办法功效,就是先在办理计划中,找到指定的项目,然后在找到的项目中,找到指定的文件夹,然后在找到的文件夹中,创立指定的文件。假如有一项没有满意,则不创立任何文件。基础上每段代码下面我都有增添了正文,以是应当不难了解。假如有对”项目范本”这个观点不太分明的同砚,能够到百度中搜刮一下。我们在vs项目中增加的每一个文件城市有一个对应的模板文件。我们也能够本人创立与增加模板文件。

3、DataType.cs文件次要就是sqlserver与C#变量范例的对应,由于在天生DAL层数据的时分,这二者之间是必要转换的。

4、DbHelperSQL.cs,MyMessageBox.cs,TableFrame.cs,tools.cs是帮助类,没甚么出格的中央。

余下三个文件源码对照长,放鄙人一章。C#中有两处地方用到new关键字,第一处也是最常见的一处是用在调用构造函数的时候,这种情况也是大家见的最多的一种。另一处是用在派生类中,作用有隐藏成员,切断继承关系等,相信第二处的用法大家明显要比第一处生疏。
第二个灵魂 该用户已被删除
沙发
发表于 2015-1-18 13:07:08 | 只看该作者
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
不帅 该用户已被删除
板凳
发表于 2015-1-25 13:45:16 | 只看该作者
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
山那边是海 该用户已被删除
地板
发表于 2015-2-2 22:19:39 | 只看该作者
微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。
精灵巫婆 该用户已被删除
5#
发表于 2015-2-8 14:55:13 | 只看该作者
关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。
若相依 该用户已被删除
6#
发表于 2015-2-25 20:00:48 | 只看该作者
我的意思是.net好用,从功能上来说比JAVA强还是很明显的。
admin 该用户已被删除
7#
发表于 2015-3-8 04:16:32 | 只看该作者
可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。
分手快乐 该用户已被删除
8#
发表于 2015-3-15 21:32:47 | 只看该作者
大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。
小女巫 该用户已被删除
9#
发表于 2015-3-22 05:09:17 | 只看该作者
比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。
飘灵儿 该用户已被删除
10#
 楼主| 发表于 2015-3-22 05:09:21 | 只看该作者
现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2025-1-27 05:19

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表