Enterprise Library深入解析与灵活应用(5)2010-08-18 cnblogs artech最近负责一个框架性项目的升级,主要是从.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 ProjectsArtech.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:
eadme.txt"/></arguments></add><!--step 3--><add name="Copy to Output Location" type="Artech.BatchJobExecutor.DirectoryMoveJobStep,Artech.BatchJobExecutor" source="$RootLocation$ConsoleApplication2Bin" destination="$OutputLocation$" /><!--step 4--><add name="Execute Command 1" type="Artech.BatchJobExecutor.ExecutableJobStep,Artech.BatchJobExecutor" executableFile="$OutputLocation$debugConsoleApplication1.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:
eadme.txtStep 3:将原目录移到Step1创建了 输出目录Step 4:执行Step 3移到输出目录下的可执行文件,参数通过 <arguments>配置节指定Step 5:移出Step 1创建的临时目录有了上面的配置,运行我们Batch Job Executor,将会得到下面的界面。 两个批处理名称在下拉框中列出,对于选中的当前批处理,5个Job Step在下面的 Grid中列出来。点击“Start”按钮,批处理便开始执行,下面的进度 条现实当前的进度。