用C#编写的插件管理程序

本文介绍了一种将软件模块化的开发方法,通过配置XML文件来动态加载不同的功能模块,实现软件定制化需求。支持多种脚本语言并采用预编译机制。

最近公司的老板要求把软件做成模块化的,只需要从公司的功能库中Check若干个,组合一下(不要编译)就可以成为一个新的软件的要求。 

为了实现这个要求,实现了一个插件工具(尚处于第一个阶段)。

XML配置如下:

app.xml

<?xml version="1.0" encoding="GB2312"?>
<Application>
    
<Runtimes>
        
<Runtime Import = "System" />
        
<Runtime Import = "System.Windows.Forms" />
    
</Runtimes>
  
    
<Modules>
        
<Module ReferenceFile ="./Module.addin" />
    
</Modules>    
</Application>

Module.addin如下:

 

<?xml version="1.0" encoding="gb2312" ?>
<Module Name = "索力测试" 
        SN 
= "6B272DB3-1ADA-47fe-AA36-9C2C5A6EBC83" 
        Icon 
="" 
        IsEnabled 
= "true">

    
<References>
        
<Reference Assembly = "..TestRxAddInCore.dll" />
    
</References>

    
<Resources>
        
<Resource File = ".strings.resources" Type = "string" />
        
<Resource File = ".images.resources" Type = "images" />
    
</Resources>

    
<Path Name = "MainMenu">
        
<MenuItem ID = "m_menu_file" Label = "文件(&amp;F)">
            
<MenuItem   ID = "m_menu_file_new" 
                        Label 
= "新建(&amp;N)" 
                        ShortCut 
= "Control|N" 
                        Icon 
= "" 
                        Class 
= ""/>
            
<MenuItem   ID = "m_menu_file_open" 
                        Label 
= "打开(&amp;O)..." 
                        ShortCut 
= "Control|O" 
                        Icon 
= "" 
                        Class 
= ""/>
            
<MenuItem  Category = "separator"/>
            
<MenuItem   ID = "m_menu_file_save" 
                        Label 
= "保存(&amp;S)..." 
                        ShortCut 
= "Control|S" 
                        Icon 
= "" 
                        Class 
= ""/>
            
<MenuItem   ID = "m_menu_file_savesa" 
                        Label 
= "另存为(&amp;A)..." 
                        ShortCut 
= "" 
                        Icon 
= "" 
                        Class 
= ""/>
            
<MenuItem   ID = "m_menu_file_datasavesa" 
                        Label 
= "数据另存为" 
                        ShortCut 
= "" 
                        Icon 
= "" 
                        Class 
= "">
                
<MenuItem   ID = "m_menu_datasavesa_txt" 
                             Label 
= "文本文件"  
                             ShortCut 
= "" 
                             Class 
= ""
                             Icon 
= "" />
                
<MenuItem   ID = "m_menu_datasavesa_excel" 
                             Label 
= "Excel文件"  
                             ShortCut 
= "" 
                             Class 
= ""
                             Icon 
= "" />
                
<MenuItem   ID = "m_menu_datasavesa_word" 
                             Label 
= "Word文件"  
                             ShortCut 
= "" 
                             Class 
= ""
                             Icon 
= "" />
                
<MenuItem   ID = "m_menu_datasavesa_matlab" 
                             Label 
= "MatLab Workspace"  
                             ShortCut 
= "" 
                             Class 
= ""
                             Icon 
= "" />
            
</MenuItem>
            
<MenuItem  Category = "separator"/>
            
<MenuItem   ID = "m_menu_file_print" 
                        Label 
= "打印(&amp;P)..." 
                        ShortCut 
= "Control|P" 
                        Icon 
= "" 
                        Class 
= ""/>
            
<MenuItem   ID = "m_menu_file_preview" 
                        Label 
= "打印预览(&amp;W)..." 
                        ShortCut 
= "" 
                        Icon 
= "" 
                        Class 
= ""/>
            
<MenuItem  Category = "separator"/>
            
<MenuItem   ID = "m_menu_file_import" 
                        Label 
= "导入" 
                        ShortCut 
= "" 
                        Icon 
= "" 
                        Class 
= "">
                
<MenuItem   ID = "m_menu_file_import_sensor" 
                             Label 
= "传感器信息"  
                             ShortCut 
= "" 
                             Class 
= ""
                             Icon 
= "" />
                
<MenuItem   ID = "m_menu_file_import_cable" 
                             Label 
= "索信息"  
                             ShortCut 
= "" 
                             Class 
= ""
                             Icon 
= "" />
            
</MenuItem>
            
<MenuItem   ID = "m_menu_file_export" 
                        Label 
= "导出" 
                        ShortCut 
= "" 
                        Icon 
= "" 
                        Class 
= "">
                
<MenuItem   ID = "m_menu_file_export_sensor" 
                             Label 
= "传感器信息"  
                             ShortCut 
= "" 
                             Class 
= ""
                             Icon 
= "" />
                
<MenuItem   ID = "m_menu_file_export_cable" 
                             Label 
= "索信息"  
                             ShortCut 
= "" 
                             Class 
= ""
                             Icon 
= "" />
            
</MenuItem>
            
<MenuItem  Category = "separator"/>
            
<MenuItem   ID = "m_menu_file_exit" 
                        Label 
= "退出(&amp;X)" 
                        ShortCut 
= "Control|X" 
                        Icon 
= "" 
                        Class 
= ""/>
        
</MenuItem>

        
<MenuItem ID = "m_menu_control" Label = "控制(&amp;C)">
            
<MenuItem   ID ="m_menu_control_blance"
                        Label
="平衡"
                        ShortCut
=""
                        Icon
=""
                        Class
=""/>
            
<MenuItem  Category = "separator"/>
            
<MenuItem   ID ="m_menu_control_sampling_start"
                        Label
="开始采样"
                        ShortCut
=""
                        Icon
=""
                        Class
=""/>
            
<MenuItem   ID ="m_menu_control_sampling_pause"
                        Label
="暂停采样"
                        ShortCut
=""
                        Icon
=""
                        Class
=""/>
            
<MenuItem   ID ="m_menu_control_sampling_stop"
                        Label
="停止采样"
                        ShortCut
=""
                        Icon
=""
                        Class
=""/>
            
<MenuItem  Category = "separator"/>
            
<MenuItem   ID ="m_menu_control_replay_start"
                        Label
="开始回放"
                        ShortCut
=""
                        Icon
=""
                        Class
=""/>
            
<MenuItem   ID ="m_menu_control_replay_pause"
                        Label
="暂停回放"
                        ShortCut
=""
                        Icon
=""
                        Class
=""/>
            
<MenuItem   ID ="m_menu_control_replay_stop"
                        Label
="停止回放"
                        ShortCut
=""
                        Icon
=""
                        Class
=""/>
        
</MenuItem>

        
<MenuItem ID = "m_menu_observation " Label = "观测(&amp;O)">
            
<MenuItem   ID ="m_menu_observation_cursor"
                        Label
="光标"
                        ShortCut
=""
                        Icon
=""
                        Class
="">
                
<MenuItem   ID = "m_menu_cursor_single" 
                             Label 
= "单光标"  
                             ShortCut 
= "" 
                             Class 
= "TestRxAddInCore.NewProjectCommand"
                             Icon 
= "" />
                
<MenuItem   ID = "m_menu_cursor_double" 
                             Label 
= "双光标"  
                             ShortCut 
= "" 
                             Icon 
= ""                              
                             Class 
= ""/>
                
<MenuItem   ID = "m_menu_cursor_four" 
                             Label 
= "四光标"  
                             ShortCut 
= "" 
                             Icon 
= "" 
                             Class 
= ""/>
                
<MenuItem   ID = "m_menu_cursor_xie" 
                             Label 
= "谐光标"  
                             ShortCut 
= "" 
                             Icon 
= "" 
                             Class 
= ""/>
                
<MenuItem  Category = "separator"/>
                
<MenuItem   ID = "m_menu_cursor_peak" 
                             Label 
= "峰值列表"  
                             ShortCut 
= "" 
                             Icon 
= "" 
                             Class 
= ""/>
                
<MenuItem   ID = "m_menu_cursor_sync" 
                             Label 
= "光标同步"  
                             ShortCut 
= "" 
                             Icon 
= "" 
                             Class 
= ""/>
            
</MenuItem>
            
<MenuItem   Category="separator"/>
            
<MenuItem   ID ="m_menu_observation_move"
                        Label
="数据移动"
                        ShortCut
=""
                        Icon
=""
                        Class
="">
                
<MenuItem   ID = "m_menu_move_prev" 
                             Label 
= "移动上一块"  
                             ShortCut 
= "Control|Left" 
                             Class 
= ""
                             Icon 
= "" />
                
<MenuItem   ID = "m_menu_move_prev_sync" 
                             Label 
= "同步移动上一块"  
                             ShortCut 
= "Control|Shift|Left" 
                             Class 
= ""
                             Icon 
= "" />
                
<MenuItem   ID = "m_menu_move_next_sync" 
                             Label 
= "同步移动下一块"  
                             ShortCut 
= "Control|Shift|Right" 
                             Class 
= ""
                             Icon 
= "" />
                
<MenuItem   ID = "m_menu_move_next" 
                             Label 
= "移动下一块"  
                             ShortCut 
= "Control|Right" 
                             Class 
= ""
                             Icon 
= "" />
                
<MenuItem  Category = "separator"/>
                
<MenuItem   ID = "m_menu_move_goto" 
                             Label 
= "数据定位"  
                             ShortCut 
= "Control|G" 
                             Class 
= ""
                             Icon 
= "" />
                
<MenuItem  Category = "separator"/>
                
<MenuItem   ID = "m_menu_move_first" 
                             Label 
= "移动到第一块"  
                             ShortCut 
= "Control|PageUp" 
                             Class 
= ""
                             Icon 
= "" />
                
<MenuItem   ID = "m_menu_move_last" 
                             Label 
= "移动到最后一块"  
                             ShortCut 
= "Control|PageDown" 
                             Class 
= ""
                             Icon 
= "" />
            
</MenuItem>
            
<MenuItem   Category="separator"/>
            
<MenuItem   ID ="m_menu_observation_zoom"
                        Label
="图形缩放"
                        ShortCut
=""
                        Icon
=""
                        Class
="">
                
<MenuItem   ID = "m_menu_zoom_h_in" 
                             Label 
= "横向放大"  
                             ShortCut 
= "" 
                             Class 
= ""
                             Icon 
= "" />
                
<MenuItem   ID = "m_menu_zoom_h_out" 
                             Label 
= "横向缩小"  
                             ShortCut 
= "" 
                             Class 
= ""
                             Icon 
= "" />
                
<MenuItem   ID = "m_menu_zoom_v_in" 
                             Label 
= "纵向放大"  
                             ShortCut 
= "" 
                             Class 
= ""
                             Icon 
= "" />
                
<MenuItem   ID = "m_menu_zoom_v_out" 
                             Label 
= "纵向缩小"  
                             ShortCut 
= "" 
                             Class 
= ""
                             Icon 
= "" />
                
<MenuItem  Category = "separator"/>
                
<MenuItem   ID = "m_menu_zoom_xy_in" 
                             Label 
= "增加X-Y记录仪数据量"  
                             ShortCut 
= "" 
                             Class 
= ""
                             Icon 
= "" />
                
<MenuItem   ID = "m_menu_zoom_xy_out" 
                             Label 
= "减少X-Y记录仪数据量"  
                             ShortCut 
= "" 
                             Class 
= ""
                             Icon 
= "" />
            
</MenuItem>
            
<MenuItem   Category="separator"/>
            
<MenuItem   ID ="m_menu_observation_scale"
                        Label
="刻度"
                        ShortCut
=""
                        Icon
=""
                        Class
="">
                
<MenuItem   ID = "m_menu_scale_auto" 
                             Label 
= "自动刻度"  
                             ShortCut 
= "" 
                             Class 
= ""
                             Icon 
= "" />
                
<MenuItem   ID = "m_menu_scale_default" 
                             Label 
= "默认刻度"  
                             ShortCut 
= "" 
                             Class 
= ""
                             Icon 
= "" />
                
<MenuItem   ID = "m_menu_scale_fixed" 
                             Label 
= "固定刻度"  
                             ShortCut 
= "" 
                             Class 
= ""
                             Icon 
= "" />
            
</MenuItem>
            
<MenuItem   Category="separator"/>
            
<MenuItem   ID ="m_menu_observation_info"
                        Label
="基频索力显示窗"
                        ShortCut
=""
                        Icon
=""
                        Class
=""/>
        
</MenuItem>

        
<MenuItem ID = "m_menu_view" Label = "查看(&amp;V)"></MenuItem>

        
<MenuItem ID = "m_menu_window" Label = "窗口(&amp;W)">
            
<MenuItem   ID ="m_menu_window_new"
                        Label
="新建窗口(&amp;N)"
                        ShortCut
=""
                        Icon
=""
                        Class
=""/>
            
<MenuItem   Category="separator"/>
            
<MenuItem   ID ="m_menu_window_close"
                        Label
="关闭(&amp;C)"
                        ShortCut
=""
                        Icon
=""
                        Class
=""/>
            
<MenuItem   ID ="m_menu_window_closeall"
                        Label
="全部关闭"
                        ShortCut
=""
                        Icon
=""
                        Class
=""/>
            
<MenuItem   ID ="m_menu_window_closeother"
                        Label
="除此以外全部关闭"
                        ShortCut
=""
                        Icon
=""
                        Class
=""/>
            
<MenuItem   Category="separator"/>
            
<MenuItem   ID ="m_menu_window_cascade"
                        Label
="层叠"
                        ShortCut
=""
                        Icon
=""
                        Class
=""/>
            
<MenuItem   ID ="m_menu_window_htile"
                        Label
="水平平铺"
                        ShortCut
=""
                        Icon
=""
                        Class
=""/>
            
<MenuItem   ID ="m_menu_window_vtile"
                        Label
="垂直平铺"
                        ShortCut
=""
                        Icon
=""
                        Class
=""/>
            
<MenuItem   Category="separator"/>
            
<MenuItem   ID ="m_menu_window_mgr"
                        Label
="窗口(&amp;W)..."
                        ShortCut
=""
                        Icon
=""
                        Class
=""/>
        
</MenuItem>

        
<MenuItem ID = "m_menu_help" Label = "帮助(&amp;H)">
            
<MenuItem   ID = "m_menu_help_about" 
                        Label 
= "关于(&amp;A)" 
                        ShortCut 
= "Control|A" 
                        Icon 
= "" 
                        Class 
= ""/>
            
<MenuItem   ID = "m_menu_help_topic" 
                        Label 
= "帮助主题(&amp;H)" 
                        ShortCut 
= "Control|H" 
                        Icon 
= "" 
                        Class 
= ""/>
        
</MenuItem>
    
</Path>

    
<Path Name = "Toolbar">
        
<ToolBar Label = "常用工具条" ID = "m_ToolBar_Common">
            
<ToolbarItem    ID = "m_tool_new" 
                            Tooltip 
= "新建需求" 
                            Icon 
= "${DeleteHS}" 
                            Class 
= "TestRxAddInCore.NewProjectCommand"/>

            
<ToolbarItem    Category = "separator"/>

            
<ToolbarItem    ID = "m_tool_mode"
                            Tooltip 
= "分析模式"
                            Class 
= "TestRxAddInCore.NewProjectCommand"
                            Category 
= "Combobox">
                
<ComboboxItem Label = "相关分析"></ComboboxItem>
                
<ComboboxItem Label = "时域分析" IsDefault ="true"></ComboboxItem>
            
</ToolbarItem>

            
<ToolbarItem    ID = "m_tool_cursor"
                            Tooltip 
= "光标开关"
                            Class 
= "TestRxAddInCore.NewProjectCommand"
                            Icon 
= "${Edit_RedoHS}" 
                            Category 
= "SplitButton">
                
<SplitItem   ID = "m_tool_cursor_single" 
                             Label 
= "单光标"  
                             ShortCut 
= "" 
                             Class 
= "TestRxAddInCore.NewProjectCommand"
                             Icon 
= "" />
                
<SplitItem   ID = "m_tool_cursor_double" 
                             Label 
= "双光标"  
                             ShortCut 
= "" 
                             Icon 
= ""                              
                             Class 
= ""/>
                
<SplitItem   ID = "m_tool_cursor_four" 
                             Label 
= "四光标"  
                             ShortCut 
= "" 
                             Icon 
= "" 
                             Class 
= ""/>
                
<SplitItem   ID = "m_tool_cursor_xie" 
                             Label 
= "谐光标"  
                             ShortCut 
= "" 
                             Icon 
= "" 
                             Class 
= ""/>
                
<SplitItem  Category = "separator"/>
                
<SplitItem   ID = "m_tool_cursor_peak" 
                             Label 
= "峰值列表"  
                             ShortCut 
= "" 
                             Icon 
= "" 
                             Class 
= ""/>
                
<SplitItem   ID = "m_tool_cursor_sync" 
                             Label 
= "光标同步"  
                             ShortCut 
= "" 
                             Icon 
= "" 
                             Class 
= ""/>
            
</ToolbarItem>
        
</ToolBar>
    
</Path>
</Module>

效果:

 

新增功能:(2006-10-11

1、增加了对脚本的支持。支持的脚本有C#、VB.NET、JScript、J#。对于脚本采用预编译机制。

2、脚本与脚本之间可以存在依赖关系。

需要源代码的请留下邮箱

评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值