您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > ASP.NET与SQL一起打包部署安装
一.准备必要的文件1.SQL脚本文件,生成以后安装过程中需要的表和存储过程等等;生成之后,就暂时把它命名为db.sql(注意大小写)2.LisenceFile.rtf的安装文件,因为我的系统是个人的,而且free的,所以就没有做。这个以后也是要用到的。二.在自己现有的项目里面创建部署项目:1.在“文件”菜单上指向“添加项目”,然后选择“新建项目”。(图1-2)2.在“添加新项目”对话框中,选择“项目类型”窗格中的“安装和部署项目”,然后选择“模板”窗格中的“Web安装项目”。在“名称”框中键入TestInstaller。(图1-3)3.单击“确定”关闭对话框。4.项目被添加到解决方案资源管理器中,并且文件系统编辑器打开。5.在“属性”窗口中,选择ProductName属性,并键入GCRM。(1-2)三。将VbNetTest项目的输出添加到部署项目中(假如你的虚拟目录是SQLANDASPNet)1.在“文件系统编辑器”中,选择“Web应用程序文件夹。在“操作”菜单上,指向“添加”,然后选择“项目输出”。(图1-4)2.在“添加项目输出组”对话框中,选择“项目”下拉列表中的“SQLANDASPNet”。3.单击“确定”关闭对话框。4.从列表中选择“主输出”和“内容文件”组,然后单击“确定”。(图1-5)(图1-4)五.创建自定义操作1.在解决方案资源管理器中选择“TestInstaller”项目。在“视图”菜单上指向“编辑器”,然后选择“自定义操作”。(图1-9)2.在自定义操作编辑器中选择“安装”节点。在“操作”菜单上,选择“添加自定义操作”。3.在“选择项目中的项”对话框中,双击“应用程序文件夹”。4.选择“主输出来自DBCustomAction(活动)”项,然后单击“确定”关闭对话框。5.在“属性”窗口中,选择CustomActionData属性并键入/dbname=[CUSTOMTEXTA1]/server=[CUSTOMTEXTA2]/user=[CUSTOMTEXTA3]/pwd=[CUSTOMTEXTA4]/targetdir=[TARGETDIR]\。(图1-10)附/targetdir=[targetdir]\是安装后的目标路径,为了在dbcustomaction类中获得安装后的路径,我们设置此参数。另外,安装后的路径也可以通过Reflection得到:DimAsmAsSystem.Reflection.Assembly=_System.Reflection.Assembly.GetExecutingAssemblyMsgBox(Asm.Location)(图1-9)(图1-10)六.创建安装程序类1.在“文件”菜单上指向“新建”,然后选择“项目”。2.在“新建项目”对话框中,选择“项目类型”窗格中的“VisualBasic项目”,然后选择“模板”窗格中的“类库”。在“名称”框中键入DBCustomAction。3.单击“打开”关闭对话框。4.从“项目”菜单中选择“添加新项”。5.在“添加新项”对话框中选择“安装程序类”。在“名称”框中键入DBCustomAction。6.单击“确定”关闭对话框。(图1-11,1-12)注:这里是在原来的项目上建立一个简单的安装文件就可以了。(图1-11)添加后的效果图:(图1-12)这里的sql文件是要等一下添加的七.添加文件1.将SQLServer生成的脚本文件db.sql添加到“TestInstaller”项目(图1-12)2.将安装文件LisenceFile.rtf添加到“TestInstaller”项目3.在用户界面编辑器中,选择许可协议,设置LisenceFile属性为LisenceFile.rtf文件八.以下的代码是整个部署的最重要的一部分了将代码添加到安装程序类中,dbcustomaction.vb类ImportsSystem.ComponentModelimportsSystem.Configuration.InstallimportsSystem.IOimportsSystem.ReflectionPublicClassDBCustomActionClassDBCustomActioninheritsSystem.Configuration.Install.Installer组件设计器生成的代码#region组件设计器生成的代码publicSubNew()SubNew()mybase.new()'该调用是组件设计器所必需的initializecomponent()'在InitializeComponent()调用之后添加任何初始化endSub'Installer重写dispose以清理组件列表。protectedOverloadsOverridesSubDispose()SubDispose(ByValdisposingAsBoolean)ifdisposingThenifNot(componentsIsNothing)Thencomponents.dispose()endIfendIfmybase.dispose(disposing)endSubprivatecomponentsAsSystem.ComponentModel.IContainerPrivateSubInitializeComponent()SubInitializeComponent()endSub#endRegion'执行sql语句privateSubExecuteSql()SubExecuteSql(ByValconnAsString,ByValDatabaseNameAsString,ByValSqlAsString)dimmySqlConnectionAsNewSqlClient.SqlConnection(conn)dimCommandAsNewSqlClient.SqlCommand(Sql,mySqlConnection)command.connection.open()command.connection.changedatabase(databasename)trycommand.executenonquery()finally'closeConnectioncommand.connection.close()endTryendSubpublicOverridesSubInstall()SubInstall(ByValstateSaverAsSystem.Collections.IDictionary)MyBase.Install(stateSaver)'------------------------建立数据库-------------------------------------------------trydimconnStrAsString=String.Format(datasource={0};userid={1};password={2};persistsecurityinfo=false;packetsize=4096,Me.Context.Parameters.Item(server),Me.Context.Parameters.Item(user),Me.Context.Parameters.Item(pwd))'根据输入的数据库名称建立数据库executesql(connstr,master,CREATEDATABASE+Me.Context.Parameters.Item(dbname))'调用osql执行脚本dimsqlProcessAsNewSystem.Diagnostics.Processsqlprocess.startinfo.filename=osql.exesqlprocess.startinfo.arguments=String.Format(-U{0}-P{1}-d{2}-i{3}db.sql,Me.Context.Parameters.Item(user),Me.Context.Parameters.Item(pwd),Me.Context.Parameters.Item(dbname),Me.Context.Parameters.Item(targetdir))sqlprocess.startinfo.windowstyle=ProcessWindowStyle.Hiddensqlprocess.start()sqlprocess.waitforexit()'等待执行sqlprocess.close()'删除脚本文件dimsqlFileInfoAsNewSystem.IO.FileInfo(String.Format({0}db.sql,Me.Context.Parameters.Item(targetdir)))ifsqlFileInfo.ExistsThensqlfileinfo.delete()endIfcatchexAsExceptionthrowexendTry'---------------------将连接字符串写入Web.config-----------------------------------trydimFileInfoAsSystem.IO.FileInfo=NewSystem.IO.FileInfo(Me.Context.Parameters.Item(targetdir)&\web.config)ifNotFileInfo.ExistsThenthrowNewInstallException(没有找到配置文件)endIf'实例化xml文档dimXmlDocumentAsNewSystem.Xml.XmlDocumentxmldocument.load(fileinfo.fullname)'查找到appsettings中的节点dimNodeAsSystem.Xml.XmlNodedimFoundItAsBoolean=FalseforEachNodeInXmlDocument.Item(configuration).Item(appSettings)ifNode.Name=addThenifNode.Attributes.GetNamedItem(key).Value=connStringThen'写入连接字符串node.attributes.getnameditem(value).value=String.Format(PersistSecurityInfo=False;DataSource={0};InitialCatalog={1};UserID={2};Password={3};PacketSize=4096;Pooling=true;MaxPoolSize=100;MinPoolSize=1,_me.context.parameters.item(server),Me.Context.Parameters.Item(dbname),Me.Context.Parameters.Item(user),Me.Context.Parameters.Item(pwd))foundit=TrueendIfendIfnextNodeifNotFoundItThenthrowNewInstallException(web.Config文件没有包含connString连接字符串设置)endIfxmldocument.save(fileinfo.fullname)catchexAsExceptionthrowexendTryendSubendClass有点难度的就是那个process类,它调用了osql.exe程序,来执行sql语句osql-U,-P,,-d,-i。web.config的修改代码是利用xml的语法实现。不是很难理解。最后编译生成!如图:安装界面:如图项目打包总结实现功能:根据用户自定义指定的数据库名及其他一些文件的安装如(iewebcontrols)步骤:新建一项目:vis
本文标题:ASP.NET与SQL一起打包部署安装
链接地址:https://www.777doc.com/doc-1198618 .html