aardio 文档

aardio 范例: .Net 程序集合并工具

//合并程序集
//请改用 dotNet.reference
import fonts.fontAwesome;
import win.ui;
/*DSG{{*/
var winform = win.form(text=".Net 程序集合并工具";right=774;bottom=508)
winform.add(
btnIFileOpenDir={cls="plus";left=495;top=13;right=539;bottom=43;align="left";color=3947580;dr=1;dt=1;font=LOGFONT(h=-13);iconStyle={align="left";font=LOGFONT(h=-13;name='FontAwesome');padding={left=8}};iconText='\uF07C';notify=1;textPadding={left=25};z=11};
btnMerge={cls="plus";text="合并程序集";left=421;top=390;right=550;bottom=420;align="left";bgcolor=-5197169;db=1;dr=1;font=LOGFONT(h=-13);iconStyle={align="left";font=LOGFONT(h=-13;name='FontAwesome');padding={left=20}};iconText='\uF0F2';notify=1;textPadding={left=39};z=12};
btnOpenInputFiles={cls="plus";left=704;top=56;right=741;bottom=86;align="left";color=3947580;dr=1;dt=1;font=LOGFONT(h=-13);iconStyle={align="left";font=LOGFONT(h=-13;name='FontAwesome');padding={left=8}};iconText='\uF0C5';notify=1;textPadding={left=25};z=13};
btnOpenOutputPath={cls="plus";left=359;top=143;right=396;bottom=173;align="left";color=3947580;dr=1;dt=1;font=LOGFONT(h=-13);iconStyle={align="left";font=LOGFONT(h=-13;name='FontAwesome');padding={left=8}};iconText='\uF064';notify=1;textPadding={left=25};z=14};
chkDebug={cls="checkbox";text="调试版本";left=266;top=188;right=427;bottom=214;dl=1;dr=1;dt=1;z=4};
cmbTargetPlatform={cls="combobox";left=133;top=185;right=235;bottom=207;dl=1;dt=1;edge=1;items={"v4";"v2"};mode="dropdownlist";z=2};
editInput={cls="edit";text="*.dll";left=134;top=57;right=691;bottom=126;autohscroll=false;dl=1;dr=1;dt=1;edge=1;multiline=1;vscroll=1;z=7};
editLog={cls="edit";left=134;top=229;right=691;bottom=381;autohscroll=false;db=1;dl=1;dr=1;dt=1;edge=1;multiline=1;vscroll=1;z=1};
editOutput={cls="edit";text="output.dll";left=133;top=143;right=347;bottom=168;dl=1;dr=1;dt=1;edge=1;z=5};
editWorkDir={cls="edit";left=134;top=15;right=482;bottom=40;dl=1;dr=1;dt=1;edge=1;z=10};
lbOutput={cls="static";text="输出文件名:";left=36;top=146;right=124;bottom=165;align="right";dl=1;dt=1;transparent=1;z=6};
static={cls="static";text="目标 .Net 版本:";left=16;top=184;right=124;bottom=203;align="right";dl=1;dt=1;transparent=1;z=3};
static2={cls="static";text="输入程序集:";left=36;top=61;right=124;bottom=80;align="right";dl=1;dt=1;transparent=1;z=8};
static3={cls="static";text="工作目录:";left=31;top=19;right=124;bottom=38;align="right";dl=1;dt=1;transparent=1;z=9};
static4={cls="static";text="如果需要在运行时加载单个原始程序集,则合并后的新程序集可能会出错。
这时可以改用 dotNet.reference() 函数注册多个内存程序集到『虚拟程序集引用表』,
aardio 或 .NET 程序集本身都支持这种『虚拟程序集』(除非存在访问本地程序集文件的代码)。
但如果程序中用到相互不兼容但名字相同的程序集,用 ILMerge 合并程序集也许能解决问题。";left=133;top=431;right=735;bottom=503;notify=1;transparent=1;z=15}
)
/*}}*/

import fsys;
import dotNet.merge;
winform.btnMerge.oncommand = function(id,event){
    if(!fsys.isDir(winform.editWorkDir.text)){
        winform.editWorkDir.showErrorTip("请指定有效的工作目录");
        return;
    }
    winform.btnMerge.disabledText = {'\uF254';'\uF251';'\uF252';'\uF253';'\uF250';text=''}

    var ilMerge = dotNet.merge(winform.editWorkDir.text);
    ilMerge.debug = winform.chkDebug.checked;
    ilMerge.targetPlatform = winform.cmbTargetPlatform.selText;
    ilMerge.log = true;

    var prcs = ilMerge.popen(winform.editOutput.text,string.splitEx(winform.editInput.text,"[,\r\n]"));
    prcs.logResponse(winform.editLog);
    prcs.waitOne();

    winform.btnMerge.disabledText = null;
}

import fsys;
import fsys.dlg;
winform.btnOpenInputFiles.oncommand = function(id,event){
    var paths = fsys.dlg.openEx("*.dll|*.dll||","选择要合并的程序集",winform.editWorkDir.text)
    if(#paths){
        if(!#winform.editWorkDir.text){
            winform.editWorkDir.text = io.splitpath(paths[1]).dir;
        }

        var items = {}
        for(k,v in paths){
            table.push(items,..fsys.path.relative(v,winform.editWorkDir.text,false):v);
        }

        winform.editInput.text = string.join(items,",");
    }
}

import fsys.dlg.dir;
winform.btnIFileOpenDir.oncommand = function(id,event){
    var path = fsys.dlg.dir(,winform,'请选择目录')
    if(path){
        winform.editWorkDir.text = path;
    }   
}

import process;
winform.btnOpenOutputPath.oncommand = function(id,event){
    if(!fsys.isDir(winform.editWorkDir.text)){
        winform.editWorkDir.showErrorTip("请先指定有效的工作目录");
        return;
    }

    if(!#winform.editOutput.text){
        winform.editOutput.showErrorTip("请先指定有效的输出文件名");
        return; 
    }

    var path = fsys.path.full(winform.editOutput.text,winform.editWorkDir.text);
    if(!io.exist(path)){
        winform.editOutput.showWarningTip("尚未生成输出文件,请点击下面的「合并程序集」");
        return;     
    }
    process.exploreSelect(path);

}

var style = {
    transButton = {
        color={
            active=0xFF00FF00;
            default=0xFF3C3C3C;
            disabled=0xFF6D6D6D;
            hover=0xFFFF0000
        }
    };
    button = {
        background={
            default=0x668FB2B0;
            disabled=0xFFCCCCCC;
            hover=0xFF928BB3
        };
        color={
            default=0xFF000000;
            disabled=0xFF6D6D6D
        }
    }
}

winform.btnOpenOutputPath.skin(style.transButton);
winform.btnOpenInputFiles.skin(style.transButton);
winform.btnIFileOpenDir.skin(style.transButton);
winform.btnMerge.skin(style.button);

winform.cmbTargetPlatform.selIndex = 1;
winform.show();
win.loopMessage();

Markdown 格式