在VS.Net中

  在VS.Net中,有很多种方法动态调用对象的构造函数。一是通过Activator类的CreateInstance()方法。这个方法我们在Remoting中也用过。它实际上是在本地或从远程创建对象类型,或获取对现有远程对象的引用。它的方法签名是:public static object CreateInstance(Type);(还有其他重载方法)注意它的返回值为object,MSDN对返回值的描述是:对新创建对象的引用。

  二是通过Assembly类的方法CreateInstance()。方法名和前一样,不过它不是静态方法。Assembly是在System.Reflection命名空间中。方法签名:public object CreateInstance(Type);(同样还有其他重载方法)返回值仍然是object,MSDN对返回值的描述是:表示该类型的 Object 的实例,其区域性、参数、联编程序和激活属性设置为空引用(Visual Basic 中为 Nothing),并且 BindingFlags 设置为 Public 或 Instance,或者设置为空引用 (Nothing)(如果没有找到 typeName)。

  当然还有其他方法,例如通过MethodInfo获得方法信息后,根据IsConstructor属性,判断是否构造函数,再根据GetParamters()方法获得参数,最后通过Invoke()方法来调用,等等……。大家可以参考MSDN。

  在这里,我且把问题简单化,只调用其默认构造函数。通过CreateInstance()方法获得object对象,再转换为实际的自定义对象类型。事实证明,这种转换为出现异常。根本的原因我还弄不清楚,初步的猜测,对于动态加载的assembly,和手动添加的assembly,Framework将两者视为了不同的assembly,即使我们使用的是同一个DLL。

  我也注意到Actovator.CreateInstance()返回的是新创建对象的引用。是否是引用再作怪呢?但Assembly.CreateInstance()方法,根据MSDN的描述,返回的是object实例,然而仍然会抛出同样的异常。所以,出现问题的具体原因,我确实无法解释。

  确实VS.Net博大精深,很多内在的运行机制我们不得而知。好吧,我们就知其然而不知其所以然吧,至少我现在已经知道了利用反射动态创建对象的解决之道!管它这么多,只要会用就行,退而求其次,也未尝不可。

  利用反射动态创建对象,事实上就是通过Assembly动态加载DLL。这里所谓的“对象”,应分为两种类型。不同的类型,解决的办法也不相同。

  一、.Net自身提供的类对象,例如Form对象、Control对象。

  这也是我们在程序开发中会经常用到的。一般我们开发应用程序,都是将界面定义好。有多少个窗口,有多少个控件,事先做好,放在项目中。但有时作交互设计时,还需要考虑用户的请求。也许用户希望某些窗体能够自己决定加载的时间。也就是说,需要提供运行时加载的功能。这时,就需要通过反射来动态创建对象了。(加载的窗体对象dll,通常是放在配置文件中。在.Net中,有专门的配置文件,它是xml格式。有关配置文件,我希望能专门写一篇文章。在本文,我的例子是固定的加载程序集。) 1、创建要动态加载的窗体对象

  首先,创建一个窗体对象FirstForm,这个窗体只有一个控件Lable,来显示窗体的名称。然后我们将它编译为dll文件FirstForm.dll,放在e:/AutoForm中。(要生成Dll文件,而不是exe,请在Solution Explorer(解决方案资源管理器)中的 FirstForms 项目上单击鼠标右键,选择 Properties(属性)。在 Output Type(输出类型)组合框中选择 Class Library(类库)。)

  这个对象的程序集名为FirstForm.dll,类型为FirstForm.Form1。

  2、创建应用程序,动态加载该对象

  启动一个新的 Windows 窗体项目。将其命名为 AutoLoadForm。在新项目中包含的空窗体 Form1 中,将它的IsMdiContainer 属性更改为 True。这样,该窗体即变成一个 MDI 父窗体。更改窗体的大小,使窗体的长和宽的尺寸大约为默认值的两倍。

  将一个面板控件拖动到窗体上,然后设置它的 Dock 属性,使它靠接在窗体的顶部。更改面板的大小,使它的高度大约为 50px。

  将一个组合框拖动到面板上。将它命名为 cboForms,然后将它的 DropDownStyle 设置为 DropDownList。

  最后,将一个按钮拖动到面板上。将它命名为 btnLoadForm,然后将它的 Text 属性设置为 Load Form。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、 开发前的准备1、 在装有Windows 2000或者Windows XP Professional的机器上安装.Net Framework SDK、Visual Studio.Net、Visual Source Safe 6C。(如果用户操作系统是Windows .Net Server,则无须安装.Net Framework SDK,.Net Server自带的IIS 6已经完全包含了对.Net的支持)这些工具在Visual Studio.Net的安装盘上都可以找到。2、 一台专门用于存放版本控制心数据库的服务器。该服务器不需要安装.NET Framework SDK和VS.Net,但是必须安装VSS 6C。我们称这台服务器为开发服务器DataCenter。3、 一个主域控制器,将DataCenter服务器加入这个域,为每一个开发用户分配域帐号。这样所有小组成员可以通过登录到Window NT域来访问版本控制信息。注意:Visual Studio 6所带的Visual Source Safe 6不支持.Net的一些文件格式。如果你安装了VSS 6,也需要再安装一次VSS 6C,否则在VS.Net环境将源代码加入到VSS数据库将会出现错误。 二、 创建空的SourceSafe数据库在开始工作之前,需要建立一个空的SourceSafe数据库,来存放源代码控制数据,并为小组开发人员分配访问帐号。在DataCenter服务器上新建Source Safe数据库。步骤如下:1、 启动"开始"——"程序"——"Microsoft Visual SourceSafe"菜单下的SourceSafe 6.0 Admin。如果你是第一次安装VSS 6C,Common数据库的Admin帐号为空。如图一所示: 2、 在Visual SourceSafe Administrator窗口,你可以看到Source Safe默认的两个用户Admin和Guest。如果你不打算使用默认的Common数据库,而要建立一个属于自己的项目数据库。选择菜单"Tools"——"Create Database",如图二所示: 3、 在弹出的对话框选择新数据库存放的位置。这里我们选择:C:\SourceManager\。点击OK后,提示你已经创建了数据库。4、 选择"Users"——"Open SourceSafe Database…",使用Browser按钮,选择刚才所创建的SourceManager数据库C:\SourceManager\srcsafe.ini。5、 使用"Users"——"Change Password"命令更改Admin帐号的密码。使用"Users"——"Add User"命令为项目小组成员创建SourceSafe帐号。6、 将C:\SourceManager目录设置为共享。共享权限默认是Everyone完全控制。如果希望只对项目小组成员开放,不希望其他人操作数据库文件(注意:没有SourceManager帐号的人不能访问SourceSafe的内容,但如果他有权限的话,可以删除或修改数据库的数据),请将Everyone组从权限组删除,并从域目录选择可以访问该目录的域帐号或计算机。7、 到此,一个空的项目数据库建立完毕。 三、 新建项目并加入版本控制下面将演示在一个装有VS.Net的计算机上创建一个Windows应用程序和一个Web项目,并把它加入到上面所建的SouceManager数据库。1、 启动VS.NET。2、 使用"文件"——"新建"——"空白解决方案"命令,在D:\下新建解决方案SourceManager。VS.Net会在D:\下自动创建一个SourceManager目录,该目录有一个解决方案文件SourceManager.sln文件。3、 使用"文件"——"新建"——"项目"命令,在项目类型选择"Visual C#项目",在"模板"选择"Window应用程序"。项目名称MyWindowApp。并选择"添入解决方案"选项。确定。 4、 使用"文件"——"新建"——"项目"命令,在项目类型选择"Visual C#项目",在"模板"选择"ASP.NET Web应用程序"。在"位置"栏填写http://localhost/MyWebApp。并选择"添入解决方案"选项。确定。 这样就在解决方案建立了一个Window应用程序和一个Web应用程序。下面讲述如何将整个解决方案加入到源代码版本控制。5、 在WebFrom1和Form1的设计器各自加入一个Label控件,保持它的属性不变。我们将看到从另一个主机上获取的程序用户界面也会有这一个控件。6、 使用"文件"——"源代码管理"——"将解决方案加到源代码管理"命令。 7、 在弹出的Visual SourceSafe Login登录窗口点击"Browser"按钮,弹出打开数据库对话框,点击该对话框的"Browser"按钮,弹出如下对话框,在"文件名"输入\\DataCenter\SourceManager\srcsafe.ini。确定后输入上面所分配的SourceSafe帐号和密码。 8、 首先会弹出一个保存解决方案的提示窗口,让你选择将要保存到SourceSafe的项目名称,默认与解决方案的名称相同。点击OK,会得到项目在数据库不存在的提示,点击"Yes"创建该项目。 9、 接下来会让你选择Web应用程序的保存位置。如下图所示。由于Web应用程序通常保存在本地的IIS根目录下。与解决方案的其它项目不在同一个目录,所以需要为Web应用程序在SourceSafe单独建立一个项目。在该窗口点击"OK"按钮接受SourceSafe的默认项目名称MyWebApp。 10、 到此,我们已经在SourceSafe添加了整个解决方案,包括一个Windows应用程序和一个Web应用程序。在"解决方案资源管理器"视图,加入源代码控制的程序旁边有一把锁(如图九所示),表示文档已签入,不可编辑。 11、 通过菜单"文件"——"源代码管理"——"Microsoft Visual SourceSafe",打开SourceSafe,可以看到,在SourceSafe已经加入了两个项目。如图十所示: 四、 获取SourceSafe的项目下面的步骤将讲述如何在另一台主机上从SourceSafe获取源代码。1、 在另一台主机上打开Visual Studio.Net开发环境。使用菜单命令"文件"——"源代码管理"——"从源代码管理打开"。重复第三步的第7个操作,选择SourceSafe数据库的位置。2、 弹出"Create local poject from SourceSafe"窗口,在"Create a new project in the"输入框填写你要保存项目的本地路径,这里我们选择"C:\MyProject"。在"SourceSafe project to"选择SourceManager项目,单击OK按钮。如果目录C:\MyProject不存在,会询问是否创建,选择"Yes All"。 3、 接下来会弹出保存Web应用程序工作副本的对话框,在工作副本位置输入框输入你想要保存Web应用的Web文件夹,也可以接受默认设置。点击"确定"按钮接受默认设置。 4、 通过上述步骤,我们已经成功地在另一个开发主机上获得保存在SourceSafe的工程。将来如果有新的开发人员加入,只需重复这四个步骤即可。 五、 版本控制的几个概念在Visual Studio.Net开发环境"解决方案资源管理器"的上下文菜单或者"文件"——有如下与文件操作有关的命令,如图十三所示: 1、 文件的"签出"(Check Out):当需要编辑一个文件时,必须将该文件"签出",SourceSafe会标志该文件已经被某个用户迁出,并确保其他用户不可编辑同一个文件。对于文件,仅当文件被签入后才有这个选项。2、 文件的"签入"(Check In):当完成文件的编辑后,最好将文件"签入",以让其他用户可以签出或者获取最新版本。对于文件,仅当文件被签出后才有这个选项。3、 "获取最新版本":从SourceSafe数据库获取指定文件或项目的最新版本,而又不必签出文件。4、 "取消签出":不在SourceSafe数据库保存签出后所做的修改,使本地文件恢复到修改之前的状态,并且将文件签入。只有文件或项目有文件被签出后才有这个选项。5、 "历史记录":查看文件修改的历史记录。SourceSafe数据库会自动保存每次"签入"前后的文件内容。如果需要查看历史记录。6、 "版本比较":可以比较当前版本与历史版本之间的差异,SourceSafe将以对照的形式将两个版本的不同之处显示出来。如图十四所示: 7、 "Roll Back":在历史版本显示对话框有一个Roll Back命令,即将文件恢复到历史版本。当文件编辑错误时,想让文件回到历史的某个点时,使用该命令。历史版本显示对话框还有其它命令,这里不一一详述,请读者慢慢研究。 8、 Visual Studio.Net关于版本控制的选项:在"工具"——"选项"命令对话框,选择左边的"源代码管理",显示如下对话框。读者可以根据项目的情况对SourceSafe选项进行设置。 9、 其它SourceSafe操作:读者可以从"文件"——"源代码管理"——"Microsoft Visual SourceSafe"菜单,进入"Visual SourceSafe Explorer",其大多数主要命令基本与Visual Studio.Net相同,这里就不再累赘。 六、 版本控制项目的管理下面将讲述版本控制相关的一些权限管理和文件映射。首先在DataCenter服务器上打开"开始"——"程序"——"Microsoft Visual SourceSafe"——"Visual Source Safe 6.0 Admin"。选择SourceManager数据库,填入Admin账号的密码。进入"SourceSafe Administrator"窗口。它有如下几个菜单。 1、 Users菜单下是关于用户操作的命令,除上面我们所使用的添加用户"Add User"、修改密码"Change Password"外,还有删除用户"Delete User"、编辑用户"Edit User"命令。"Open SourceSafe Database"命令用于更改当前SourceSafe数据库。2、 Tools菜单下的Options对话框包括了一些项目的设置。下面对主要的选项进行简单的说明:(1) General页的Allow multiple checkouts,如果选择此项,则允许多个用户同时签出文件。默认是不允许。(2) Project Security页的"Enable project security"复选框指明是否允许对项目使用安全性。该项默认为不允许。只有当选择了这个选项之后,Tools下的"Rights by Project"、"Right Assignments for User"和"Copy User Rights"才可用。这里我们将它选。(3) Shadow Folders页用于设置项目在服务器上的映射。项目在SourceSafe以二进制码形式将文件的所有版本信息保存在文件。要在服务器上创建一个目录,将项目文件映射到这个目录,使用该命令。在"Set shadow folder for project"选择在SourceSafe的SourceManager项目,在"Set shadow folder to"选择项目要映射到的目录,如C:\SourceManager_Shadow。(4) Web Projects页用于设置Web项目在服务器上的映射。在This project represents a Web Site选择SourceSafe的MyWebApp项目,在URL填入"http://localhost",即本地Web服务器(也可以填入其它服务器)。Virtual Tools填入要映射的虚拟目录,在"Deployments path"填入部署目录,这个目录将成为IIS指定虚拟目录的映射目录。3、 Tools菜单下的"Rights by Project"管理SourceSafe项目的权限,如图所示。用户权限共有四种,在Rights分别对应为:R(Read)、C(Check Out/Check In)、A(Add/Rename/Delete)、D(Destroy)。在左边的"Project"框选择一个项目,并在右边选择相应的用户,使用下面的复选框,给用户分配相应的权限。Tools菜单下的"Rights Assignments for User"用于给选定用户分配权限,操作结果与上面的命令相同。 4、 Archive菜单下的"Archive Projects"用于将指定项目打包成*.ssa(SourceSafe Archive)文件,并迁移到其他主机上,使用Archive的"Restore Projects"命令,将该文件恢复到其他主机。这两个命令用于项目的迁移。 总结使用SourceSafe与VS.Net开发环境,可以为团队开发提供完整的源代码管理方案。通过源代码管理,可以记录项目开发的过程份。 http://www.biancheng168.com/Download/HTML/27.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值