65.9K
CodeProject 正在变化。 阅读更多。
Home

BBuilder:开源批处理构建器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.90/5 (19投票s)

2007年11月1日

BSD

3分钟阅读

viewsIcon

61016

downloadIcon

1739

关于 BBuilder - 开源批处理构建器的文章

Screenshot - BBuilder1.png

引言

有一天,我的朋友告诉我,他需要改变发布构建的方式。这意味着他必须修复一个批处理文件来编译和发布多个产品。由于它必须非常可靠,并且您必须记住所有必需的 DOS 命令,因此这个过程可能很繁琐。批处理文件的每个步骤实际上都是一个可以在纯 DOS 中完成或执行外部可执行文件的命令。所以我认为以以下方式制作一个批处理编辑器会很酷

  1. 从工具箱中选择一个命令
  2. 支持重新排序
  3. 将其保存到磁盘以供将来使用
  4. 以简单的方式可视化所有命令
  5. 启用添加自定义工具作为插件
  6. 在将其部署到某处(计划任务)之前,通过优化来测试批处理

显然,我脑海中有一个应用程序,它有一个工具箱,可以将命令拖放到批处理文档表单上。外观和感觉类似于 Outlook (OLAF)。这样,我们可以轻松地编辑/向上移动、向下移动/删除项目。如果有人需要在他的批处理过程中使用自定义命令怎么办?

比方说,我的朋友需要编译(使用 .NET 编译器)并将其工作发布到几个目录中。这意味着在任何事情之前,重启一些 IIS 服务并备份旧版本。向他的团队发送电子邮件,告诉他们在他上传新版本时休息一下。版本成功上传并通过自动化崩溃测试后,他们会收到警报。流程中的所有这些步骤都可以分解为原子操作,例如:编译、备份、重启服务、复制、发送电子邮件等…… 但将工具箱限制在我们的开发范围内似乎是个错误,因为我们每个人都需要一些其他操作。我决定以开发人员添加自己的工具的方式构建工具箱。插件机制。由于我喜欢使用 .NET (C#) 编程,所以我开始使用反射来编码我的插件平台。

背景

本文介绍了一种创建灵活应用程序的简单方法,遵循以下架构

Screenshot - BBuilder2.png

图 1:插件模型

Screenshot - BBuilder3.png

图 2:插件投入工作

契约

平台本身不知道插件集合。但它肯定知道接口 BBuilder.Interface。在加载时,应用程序会加载所有实现 BBuilder.Interface 的程序集。

“契约”分为两部分

  • 视觉契约 — UserControl (ActionPanelControl),它定义了所有默认值和 UI 验证
  • 功能契约 — 接口 (IActionPanel),它定义了插件的实际逻辑:它生成命令行的方式。

Screenshot - BBuilder4.png

反射是“黑魔法”吗?

工厂用于提供所需程序集的实例;它使用反射。

public IActionPanel GetInstanceOfPlugin(string type,string assemblyPath)
{
    if (!dictPlugins.ContainsKey(type))
    {
      dictPlugins.Add(type, LoadPluginAssembly(assemblyPath));
    }
    return Activator.CreateInstance(
      dictPlugins[type].GetType(type)) as IActionPanel;
}

Using the Code

本教程应该允许您在几个步骤内添加一个名为“搜索”的新插件

  1. 创建一个新项目作为“类库”,命名为“BBuilder.Plugins.Search”
  2. 添加一个新项目作为用户控件
  3. 例如,将其命名为“Search.cs
  4. 添加一个新项目作为资源文件
  5. 将其重命名为“Resource.resx
  6. 双击“Resource.resx”。添加一个名为“Search”的图像资源。
  7. 单击搜索图像并转到属性 (F4)
  8. 将持久性更改为“嵌入到 .resx 中”,然后保存并关闭。
  9. 添加对 BBuilder.Interface DLL 的引用
  10. Search.cs 中 — 更改为以下几行
  11. using BBuilder.Interface;
    
    namespace BBuilder.Plugins.Search
    {
        public partial class Search : ActionPanelControl,IActionPanel
        {
            public Search()
            {
                InitializeComponent();
            }
    
            #region IActionPanel Members
    
            public string Category
            {
                get { return "BBuilder"; }
            }
    
            public string AuthorName
            {
                get { return "Breeback\nDownload updates at" + 
                    "http://www.breezback.com."; }
            }
    
            public string ImageKey
            {
                get { return "Search"; }
            }
    
            public string ActionName
            {
                get { return "Search Files and Folders"; }
            }
    
            public string Description
            {
                get { return "search for files and folders"; }
            }
    
            public string CommandLine
            {
                get { return "echo my commandline goes here"; }
            }
    
            public System.Drawing.Bitmap Image
            {
                get
                {
                    return Resource.Search;
                }
            }
    
            public string Serialize()
            {
                // need to return an encoded string for saving the action
    
                // to file
    
                return "";
            }
    
            public void Deserialize(string strPanel)
            {
                // need to decode the expected string to the settings of
    
                // the plugin
    
            }
    
            #endregion
        }
    }
  12. 编译项目
  13. 将“BBuilder.Plugins.Search.dll”复制到“C:\Program Files\Breezback\BBuilder\Plugins

关注点

  1. 用于灵活应用程序的反射
  2. 工厂和单例设计模式
  3. IComparer 实现以生成自定义顺序
  4. 使用专业外观的 Windows 应用程序,例如 Outlook。 具有覆盖呈现功能的强大网格
  5. Spawn process for Shell : 重定向输入/输出
  6. 使用 Background worker 创建响应式 UI
  7. 使用设置项目部署应用程序,具有自定义文件类型和图标

历史

08-16-2003:

  • 添加了第一个版本

致谢

我想感谢所有在这个项目中帮助我的人,即使是无意识的

  • OLAF 项目 – 适用于卓越的网格
  • Noogen 项目适用于验证器
  • Gregory Young 感谢他的专业知识
  • Dina 感谢她的耐心

BBuilder:开源批处理构建器 - CodeProject - 代码之家
© . All rights reserved.