最近负责一个框架性项目的升级,主要是从.NET Framework 3.0建议到.NET .NET Framework 3.5,开发工具也从VS2005迁移到VS2008。但是最让我头疼的是 ,原来Team Foundation Server 2005不能正常工作,公司暂时还没有购买VSTS 2008的打算。基于TFS 2005的Team Build功能不能使用了,导致原本通过Team Build实现的功能需要手工来做,涉及到的包括:Source Code的编译、文档的生 成、VS项目类型的模板的创建、脚本的合并、安装包的生成等等。由于绝大部分 的功能分为两类:文件系统的管理(目录/文件的创建、移动、拷贝和删除)和可 执行文件的执行,所以我本打算写一个bat文件搞定就可以了,在操作过程中觉得 可扩展性太差了,于是花了半天的时间写了一个GUI的工具。
这个工具执 行一组批处理,也可以看成是一个Sequential Workflow的执行器,我把它成为 Batch Job Executor。在使用Batch Job Executor过程中,通过配置可以对批处 理的每个步骤、或者是Workflow的每个Activity进行自由地定义。从功能上将, 这个小工具仅仅是个小玩意儿,不登大雅之堂。 不过考虑到Batch Job Executor 的涉及和实现是基于Enterprise Library典型的实现方式,比如基于EL的配置和 对象创建方式,对于那些希望进一步了解EL的读者,或许可以通过这个小小的例 子一窥EL的设计原理。对于那些EL的设计不时很了解的读者,对于以下的内容, 可能在理解上可能比较困难。最好是下载源代码,结合下面的介绍,希望会帮助 了更好的理解EL。
一、Batch Job Executor使用
使用Batch Job Executor最重要的步骤就是通过配置配处理的每一个步骤进行设置,在这里我们 组成Batch的步骤成为Job Step。我们可以先来看看下面的配置示例:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="batchJobExecutor" type="Artech.BatchJobExecutor.Configuration.BatchJobExecutorSettings,Artech.BatchJobExecutor"/> </configSections> <batchJobExecutor defaultBatchJob="Batch Job 1"> <variables> <add name="RootLocation" value="E:\Other Projects\Artech.BatchJobExecutor\"/> <add name="OutputLocation" value="E:\Output\"/> </variables> <batchJobs> <add name="Batch Job 1" description="The first batch job"> <steps> <!--step 1--> <add name="Create Temp Directory" type="Artech.BatchJobExecutor.DirectoryCreationJobStep,Artech.BatchJobExecutor" directoryToCreate="$OutputLocation$" /> <!--step 2--> <add name="Notepad" type="Artech.BatchJobExecutor.ExecutableJobStep,Artech.BatchJobExecutor" executableFile="Notepad" waitForProcessExit="false"> <arguments> <add name="param1" value="E:\readme.txt"/> </arguments> </add> <!--step 3--> <add name="Copy to Output Location" type="Artech.BatchJobExecutor.DirectoryMoveJobStep,Artech.BatchJobExecutor" source="$RootLocation$ConsoleApplication2\Bin" destination="$OutputLocation$" /> <!--step 4--> <add name="Execute Command 1" type="Artech.BatchJobExecutor.ExecutableJobStep,Artech.BatchJobExecutor" executableFile="$OutputLocation$debug\ConsoleApplication1.exe"> <arguments> <add name="param1" value="1st Patameter"/> <add name="param2" value="2nd Patameter"/> </arguments> </add> <!--step 5--> <add name="Delete Temp Directory" type="Artech.BatchJobExecutor.DirectoryDeletionJobStep,Artech.BatchJobExecutor" directoryToDelete="$OutputLocation$" /> </steps> </add> <add name="Batch Job 2" description="2nd batch job"> <steps> … … </steps> </add> </batchJobs> </batchJobExecutor> </configuration>
这个配置包含两个部分:变量的定义 和Batch Job的定义。前者定义在<variables>配置节中,一个常用的变量 ,比如基地址,可以通过name-value的方式在这里定义。在本例中,我们定义两 个变量(RootLocation和OutputLocation),对变量的引用通过$variable name$ 的方式实现。而后者呢,则通过<batchJobs>配置节进行定义,我们可以定 义一个活着多个Batch Job,在本例中我一共定义了两个批处理:Batch Job 1和 Batch Job 2。
第一个批处理由5个步骤组成,它们分别是:
Step 1:创建临时输出目录,路经通过变量定义
Step 2:通过Notepad打开一个 .txt文件,文件路径为E:\readme.txt
Step 3:将原目录移到Step1创建了 输出目录
Step 4:执行Step 3移到输出目录下的可执行文件,参数通过 <arguments>配置节指定
Step 5:移出Step 1创建的临时目录
有了上面的配置,运行我们Batch Job Executor,将会得到下面的界面。 两个批处理名称在下拉框中列出,对于选中的当前批处理,5个Job Step在下面的 Grid中列出来。点击“Start”按钮,批处理便开始执行,下面的进度 条现实当前的进度。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件
, 变量
, 配置
, job
, batch
一个
enterprise library、enterprise library 6、enterprise library 7、enterprise library 8、enterprise library5,以便于您获取更多的相关知识。