CN103593190A - 应用程序处理方法及装置 - Google Patents
应用程序处理方法及装置 Download PDFInfo
- Publication number
- CN103593190A CN103593190A CN201310575294.6A CN201310575294A CN103593190A CN 103593190 A CN103593190 A CN 103593190A CN 201310575294 A CN201310575294 A CN 201310575294A CN 103593190 A CN103593190 A CN 103593190A
- Authority
- CN
- China
- Prior art keywords
- application domain
- application
- template
- domain
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明提供了一种应用程序域的处理方法及装置,该法包括:在第一应用程序域中创建第二应用程序域;在所述第二应用程序域中创建用于执行所述第一应用程序域部分功能的实例;使用所述实例执行所述部分功能;在所述第一应用程序域中卸载所述第二应用程序域。通过本发明的方法,解决了使用某一功能时应用程序域所出现的问题,从而提高了程序处理的可靠性。
Description
技术领域
本发明涉及网络领域,具体而言,涉及一种应用程序域处理方法及装置。
背景技术
在应用程序中,会存在该应用程序使用某种功能而导致出现问题的情况,下面以T4模板为例进行说明。
T4(Text Template Transformation Toolkit)模板(也称为T4文本模板)是微软官方在VisualStudio中开始使用的代码生成引擎。在Visual Studio中,T4文本模板是由一些文本块和控制逻辑组成的混合模板,它可以生成文本文件。在Visual C#或Visual Basic中,控制逻辑编写为程序代码的片段。生成的文件可以是任何类型的文本,例如网页、资源文件或任何语言的程序源代码。现在的VS中只要与代码生成相关的场景基本上都能找T4的身影。
在使用T4模板读取程序集的信息时,需要首先将程序集加载到T4模板所在的应用程序域中,然后读取这个程序集中的信息自动生成代码。由于T4模板所在的应用程序域不会自动卸载,在T4模板执行完成后,T4模板所在的应用程序域还会锁定程序集,此时Visual Studio无法进行编译,因为编译时会替换原来的程序集,由于程序集被锁定,所以无法替换已有程序集,编译失败,此时只有重启Visual Studio才能释放对程序集的锁定。
针对相关技术中在使用某一功能时应用程序域所出现的问题,目前尚未提出有效的解决方案。
发明内容
本发明提供了应用程序域处理方法及装置,以至少解决现有技术中使用某一功能时应用程序域所出现的问题。
根据本发明的一个方面,提供了一种应用程序域处理方法,包括:在第一应用程序域中创建第二应用程序域;在所述第二应用程序域中创建用于执行所述第一应用程序域部分功能的实例;使用所述实例执行所述部分功能;在所述第一应用程序域中卸载所述第二应用程序域。
优选地,在第二应用程序域中创建用于执行第一应用程序域部分功能的实例,使用所述实例执行所述部分功能包括:在所述第二应用程序域中建立读取程序集类的实例;使用所述实例加载并读取程序集。
优选地,在所述第一应用程序域中创建所述第二应用程序域包括:在T4模板当前的第一应用程序域中创建所述第二应用程序域;在所述第一应用程序域中卸载所述第二应用程序域包括:在所述T4模板当前的第一应用程序域中卸载所述第二应用程序域,以释放对所述程序集的锁定。
优选地,在所述T4模板当前的第一应用程序域中卸载所述第二应用程序域,以释放对所述程序集的锁定之前,所述方法还包括:输出使用所述T4模板输出的代码。
优选地,一个进程中包括一个或多个应用程序域,所述第一应用程序域和所述第二应用程序域是进程中相互独立的单元。
根据本发明的另一方面,提供了一种应用程序处理装置,包括:程序域创建模块,用于在第一应用程序域中创建第二应用程序域;实例创建模块,用于在所述第二应用程序域中创建用于执行所述第一应用程序域部分功能的实例;执行模块,用于使用所述实例执行所述部分功能;卸载模块,用于在所述第一应用程序域中卸载所述第二应用程序域。
优选地,所述实例创建模块,用于在所述第二应用程序域中建立读取程序集类的实例;所述执行模块,用于使用所述实例加载并读取程序集。
优选地,所述程序域创建模块,用于在T4模板当前的第一应用程序域中创建所述第二应用程序域;所述卸载模块,用于在所述T4模板当前的第一应用程序域中卸载所述第二应用程序域,以释放对所述程序集的锁定。
优选地,所述装置还包括:输出模块,用于输出使用所述T4模板输出的代码。
优选地,一个进程中包括一个或多个应用程序域,所述第一应用程序域和所述第二应用程序域是进程中相互独立的单元。
通过本发明,采用在T4模板的第一应用程序中创建第二应用程序域,并在第二应用程序域中创建用于执行第一程序部分功能的实例,在执行完所述不封功能的实例之后,卸载第二应用程序域,解决了使用某一功能时应用程序域所出现的问题,从而提高了程序处理的可靠性。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的应用程序域处理方法的流程图;
图2是根据本发明实施例的应用程序域处理装置的结构示意图;
图3是根据本发明实施例的应用程序域处理装置的优选结构示意图;
图4是根据本发明优选实施例的应用程序域处理方法的流程图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
本发明实施例提供了应用程序域处理方法,图1是根据本发明实施例的应用程序域处理方法的流程图,如图1所示,包括如下的步骤:
步骤S102:在第一应用程序域中创建第二应用程序域。
步骤S104:在第二应用程序域中创建用于执行第一应用程序域部分功能的实例。
步骤S106:使用实例执行部分功能。
步骤S108:在第一应用程序域中卸载第二应用程序域。
通过上述步骤,创建了另外一个应用程序域(第二应用程序域),在该程序域中执行第一程序的功能,并在第一应用程序域中卸载第二应用程序域,从而解决了使用某一功能时应用程序域所出现的问题,从而提高了程序处理的可靠性。
优选地,上述步骤中涉及到的部分功能可以是任何需要在另外一个应用程序域中执行的功能,例如,可以在第二应用程序域中建立读取程序集类的实例;使用实例加载并读取程序集。
在上述实施例中,应用程序域可以指每个应用程序都是在一个进程中运行,一个进程中可以包含多个应用程序域,应用程序域就是进程中相互独立的更小的单元。程序集可以是程序的集合,本领域技术人员写的程序最后就被编译到程序集中,程序集都是加载到应用程序域中运行,经常见到的以dll为后缀的文件,即这些文件就是程序集。每个程序集可以是由许多类组成的,每个类完成一个独立的功能,例如,读取程序集的信息。实例可以是类的具体化,在程序运行时,每个类都会创建多个实例,例如,读取程序集的这个类,在运行时创建一个实例,由这个实例完成读取程序集的任务,类只是进行定义如何读取程序集,具体工作由实例来完成。
上述步骤可以应用到T4模板的相关处理中,T4模板是在Visual Studio中使用的一个代码生成工具,能够自动生成开发过程中需要的代码。
优选地,上述实施例中步骤S102可以包括:步骤S102a:在T4模板当前的第一应用程序域中创建第二应用程序域;步骤S108包括:步骤S108a:在T4模板当前的第一应用程序域中卸载第二应用程序域,以释放对程序集的锁定。
优选地,在步骤S108a之前包括:输出使用所述T4模板输出的代码。
采用在T4模板的第一应用程序中创建第二应用程序域,并在第二应用程序域中创建用于执行第一程序部分功能的实例,在执行完所述不封功能的实例之后,卸载第二应用程序域,解决了在使用T4模板时不能自动卸载应用程序域的问题,从而使得在T4模板编译的时候不会出现由于程序集被占用导致的编译错误,也不需要重启Visual Studio,因此节约了时间,提高开发的效率。
优选地,一个进程中包括一个或多个应用程序域,第一应用程序域和第二应用程序域是进程中相互独立的单元。
本发明实施例还提供了应用程序域处理装置,该装置可以用于实现上述方法。图2是根据本发明实施例的应用程序域处理装置的结构示意图,如图2所示,包括:程序域创建模块22,用于在第一应用程序域中创建第二应用程序域;实例创建模块24,用于在第二应用程序域中创建用于执行第一应用程序域部分功能的实例;执行模块26,用于使用实例执行部分功能;卸载模块28,用于在第一应用程序域中卸载第二应用程序域。
优选地,实例创建模块22还用于在第二应用程序域中建立读取程序集类的实例;执行模块26还用于使用实例加载并读取程序集。
需要说明的是:在上述装置中,应用程序域是指每个应用程序都是在一个进程中运行,一个进程中可以包含多个应用程序域,应用程序域就是进程中相互独立的更小的单元。程序集:通俗的解释就是程序的集合,本领域技术人员写的程序最后就被编译到程序集中,程序集都是加载到我们的应用程序域中运行,经常见到的以dll为后缀的文件,这些文件就是我们的程序集。类:每个程序集都是由许多类组成的,每个类完成一个独立的功能,比如读取程序集的信息。实例:实例就是类的具体化,在程序运行时,每个类都会创建多个实例,比如读取程序集的这个类,在运行时创建一个实例,由这个实例完成读取程序集的任务,类只是进行定义如何读取程序集,具体工作由实例来完成。
优选地,程序域创建模块22,用于在T4模板当前的第一应用程序域中创建第二应用程序域;卸载模块28,用于在T4模板当前的第一应用程序域中卸载第二应用程序域,以释放对程序集的锁定。
在上述装置中,T4模板是在Visual Studio中使用的一个代码生成工具,能够自动生成开发过程中需要的代码。
本发明实施例还提供了一种优选的应用程序域处理装置。图3是根据本发明实施例的应用程序域处理装置的优选结构示意图,如图3所示,该装置还包括:输出模块32,用于输出使用T4模板输出的代码。
优选地,在上述装置中一个进程中包括一个或多个应用程序域,第一应用程序域和第二应用程序域是进程中相互独立的单元。
下面将结合优选的实施例进行描述。
图4是根据本发明优选实施例的应用程序域处理方法的流程图。如图4所示,本发明方法的步骤包括:
步骤S2:在T4模板当前的应用程序域中创建一个应用程序域;
其中,T4模板是在Visual Studio中使用的一个代码生成工具,能够自动生成开发过程中需要的代码;应用程序域:每个应用程序都是在一个进程中运行,一个进程中可以包含多个应用程序域,应用程序域就是进程中相互独立的更小的单元。
步骤S4:在新创建的应用程序域中创建读取程序集类的实例;
其中,程序集就是程序的集合,本领域技术人员写的程序最后就被编译到程序集中,程序集都是加载到我们的应用程序域中运行,经常见到的以dll为后缀的文件,即这些文件为程序集。类:每个程序集都是由许多类组成的,每个类完成一个独立的功能,比如读取程序集的信息。实例:实例就是类的具体化,在程序运行时,每个类都会创建多个实例,比如读取程序集的这个类,在运行时创建一个实例,由这个实例完成读取程序集的任务,类只是进行定义如何读取程序集,具体工作由实例来完成。
步骤S6:使用创建的类的实例加载并读取程序集,此时这个程序集被加载到新创建的应用程序域中,而不是T4模板所在的应用程序域。
步骤S8:输出生成的代码。
步骤S10:在当前T4应用程序域中卸载新创建的应用程序域,释放对程序集的锁。
综上所述,通过上述优选实施例,解决了T4模板生成完代码之后,释放了对程序集的占用以及编译的时候不会出现由于程序集被占用导致的编译错误的问题,因此也就不需要重启Visual Studio,而重启Visual Studio是个比较耗时的操作,因此可以节约时间,提高开发的效率。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种应用程序域处理方法,其特征在于,所述方法包括:
在第一应用程序域中创建第二应用程序域;
在所述第二应用程序域中创建用于执行所述第一应用程序域部分功能的实例;
使用所述实例执行所述部分功能;
在所述第一应用程序域中卸载所述第二应用程序域。
2.根据权利要求1所述的方法,其特征在于,在第二应用程序域中创建用于执行第一应用程序域部分功能的实例,使用所述实例执行所述部分功能包括:
在所述第二应用程序域中建立读取程序集类的实例;
使用所述实例加载并读取程序集。
3.根据权利要求2所述的方法,其特征在于,
在所述第一应用程序域中创建所述第二应用程序域包括:在T4模板当前的第一应用程序域中创建所述第二应用程序域;
在所述第一应用程序域中卸载所述第二应用程序域包括:在所述T4模板当前的第一应用程序域中卸载所述第二应用程序域,以释放对所述程序集的锁定。
4.根据权利要求3所述的方法,其特征在于,在所述T4模板当前的第一应用程序域中卸载所述第二应用程序域,以释放对所述程序集的锁定之前,所述方法还包括:
输出使用所述T4模板输出的代码。
5.根据权利要求1至4中任何一项所述的方法,其特征在于,一个进程中包括一个或多个应用程序域,所述第一应用程序域和所述第二应用程序域是进程中相互独立的单元。
6.一种应用程序域处理装置,其特征在于,所述装置包括:
程序域创建模块,用于在第一应用程序域中创建第二应用程序域;
实例创建模块,用于在所述第二应用程序域中创建用于执行所述第一应用程序域部分功能的实例;
执行模块,用于使用所述实例执行所述部分功能;
卸载模块,用于在所述第一应用程序域中卸载所述第二应用程序域。
7.根据权利要求6所述的装置,其特征在于,
所述实例创建模块,用于在所述第二应用程序域中建立读取程序集类的实例;
所述执行模块,用于使用所述实例加载并读取程序集。
8.根据权利要求7所述的装置,其特征在于,
所述程序域创建模块,用于在T4模板当前的第一应用程序域中创建所述第二应用程序域;
所述卸载模块,用于在所述T4模板当前的第一应用程序域中卸载所述第二应用程序域,以释放对所述程序集的锁定。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
输出模块,用于输出使用所述T4模板输出的代码。
10.根据权利要求6至9中任何一项所述的装置,其特征在于,一个进程中包括一个或多个应用程序域,所述第一应用程序域和所述第二应用程序域是进程中相互独立的单元。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310575294.6A CN103593190A (zh) | 2013-11-15 | 2013-11-15 | 应用程序处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310575294.6A CN103593190A (zh) | 2013-11-15 | 2013-11-15 | 应用程序处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103593190A true CN103593190A (zh) | 2014-02-19 |
Family
ID=50083350
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310575294.6A Pending CN103593190A (zh) | 2013-11-15 | 2013-11-15 | 应用程序处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103593190A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104267967A (zh) * | 2014-10-15 | 2015-01-07 | 北京国双科技有限公司 | 软件的程序代码的生成方法及装置 |
CN105718322A (zh) * | 2014-11-30 | 2016-06-29 | 中国科学院沈阳自动化研究所 | 同一进程下多应用模块客户端的异常处理方法 |
CN111522603A (zh) * | 2020-04-23 | 2020-08-11 | 中国人民解放军空军勤务学院 | 一种应用程序处理方法和装置、计算机设备、存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090083740A1 (en) * | 2007-09-20 | 2009-03-26 | Microsoft Corporation | Asynchronous execution of software tasks |
CN101655789A (zh) * | 2009-09-22 | 2010-02-24 | 用友软件股份有限公司 | 一种实现应用组件热插拔的方法和装置 |
-
2013
- 2013-11-15 CN CN201310575294.6A patent/CN103593190A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090083740A1 (en) * | 2007-09-20 | 2009-03-26 | Microsoft Corporation | Asynchronous execution of software tasks |
CN101655789A (zh) * | 2009-09-22 | 2010-02-24 | 用友软件股份有限公司 | 一种实现应用组件热插拔的方法和装置 |
Non-Patent Citations (2)
Title |
---|
ARTECH: "《编写T4模板进行代码生成无法避免的两个话题:"Assembly Locking" & "Debug"》", 《HTTP://WWW.CNBLOGS.COM/ARTECH/ARCHIVE/2010/11/16/T4_ASSEMBLY_LOCKING_DEBUG.HTML》 * |
RASCALLYSNAKE: "《AppDomain与动态加载程序集》", 《HTTP://WWW.CNBLOGS.COM/RASCALLYSNAKE/ARCHIVE/2010/09/10/1823514.HTML》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104267967A (zh) * | 2014-10-15 | 2015-01-07 | 北京国双科技有限公司 | 软件的程序代码的生成方法及装置 |
CN104267967B (zh) * | 2014-10-15 | 2018-06-26 | 北京国双科技有限公司 | 软件的程序代码的生成方法及装置 |
CN105718322A (zh) * | 2014-11-30 | 2016-06-29 | 中国科学院沈阳自动化研究所 | 同一进程下多应用模块客户端的异常处理方法 |
CN105718322B (zh) * | 2014-11-30 | 2018-10-23 | 中国科学院沈阳自动化研究所 | 同一进程下多应用模块客户端的异常处理方法 |
CN111522603A (zh) * | 2020-04-23 | 2020-08-11 | 中国人民解放军空军勤务学院 | 一种应用程序处理方法和装置、计算机设备、存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109684057B (zh) | 任务处理方法、装置和存储介质 | |
US8996339B2 (en) | Incremental formal verification | |
CN105159738A (zh) | 一种热补丁实现方法及系统 | |
EP3039534B1 (en) | Generating an idempotent workflow | |
US9639442B2 (en) | Modified condition/decision coverage test case automation | |
CN111427579A (zh) | 插件、应用程序实现方法及系统和计算机系统及存储介质 | |
CN103593190A (zh) | 应用程序处理方法及装置 | |
CN113296786A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
Farzan et al. | Phased synthesis of divide and conquer programs | |
CN116610752A (zh) | 事务性分布式数据同步方法、装置、系统及存储介质 | |
CN105260184A (zh) | 一种恢复镜像文件的调试方法及装置 | |
CN111241594B (zh) | 交易信息的加签方法、装置、计算机设备和存储介质 | |
Filou et al. | Towards proved distributed algorithms through refinement, composition and local computations | |
CN110955415A (zh) | 一种投影多平台服务适配的方法 | |
EP4318211A1 (en) | Method for inspecting code under weak memory order architecture, and corresponding device | |
Pais et al. | From UML state machines to Petri nets: History attribute translation strategies | |
CN113031964B (zh) | 一种大数据应用的管理方法、装置、设备及存储介质 | |
Luth et al. | Towards a methodology for self-verification | |
CN115291893A (zh) | 一种代码运行部署系统及方法 | |
Schwarzl et al. | Generation of executable test cases based on behavioral UML system models | |
CN107291439B (zh) | 一种目标增量数据构建方法及装置 | |
CN110377367B (zh) | 组件配置方法、装置、电子终端及计算机可读存储介质 | |
CN103473089A (zh) | 一种分布式java程序运行方法、装置和系统 | |
Lee et al. | Goal-based automated code generation in self-adaptive system | |
Ipate et al. | Model learning and test generation using cover automata |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140219 |
|
RJ01 | Rejection of invention patent application after publication |