这次发布的是这两天做的一个WIX工具QuickWIX,主要解决两个问题点1.对大文件快速生成wix标签(files,Directories,ComponentRef);2.比较前后两次工程的差异。大的WIX工程有好几千个文件,开发人员增加dll,或者资源文件都是不确定的,而且很多时候我们无法直接取代,所以需要一个对比的功能,来告诉打包人员哪里新增了,哪里删除了,这样加快打包速度。
一、介绍
工具是个简单的winform程序。下面做几点说明。
1.生成XML:会更具路径和变量信息,生成Fragment,Feature和Directory。
2.对比:找出差异的文件、目录和组件信息:
3.自动保存最新工程:如果选中,在对比的时候就会把当前工程的信息保存下来。
4.保存:手动保存当前工程信息
5.目录:当前工程的目录信息。
6.组件:当前工程的组件信息。
7.目录:当前工程的目录信息。
二、原理
1.工程目录如下,所有WIX先关对象都继承IWixBase接口。
用于生成对象本身的WIX标签。这样在有子类的时候,调用子类的ToWixString()方法即可。
public interface IWixBase { /// <summary> /// 返回wix标签 /// </summary> /// <returns></returns> string ToWixString(); }
2.WixProj包含WixDirectory,WixFragment,WixFeature,是Wix对象最父类的元素。也是用来保存xml的对象。
[Serializable] public class WixProj : IWixBase { private WixDirectory _wixDirectory; private WixFragment _wixFragment; private WixFeature _wixFeature; /// <summary> /// 比较Directory /// </summary> public WixDirectory WixDirectory { get { return _wixDirectory??(_wixDirectory=new WixDirectory()); } set { _wixDirectory = value; } } /// <summary> /// 比较Files /// </summary> public WixFragment WixFragment { get { return _wixFragment??(_wixFragment=new WixFragment()); } set { _wixFragment = value; } } /// <summary> /// 比较ComponentRef /// </summary> public WixFeature WixFeature { get { return _wixFeature??(_wixFeature=new WixFeature()); } set { _wixFeature = value; } } public string ToWixString() { var sb = new StringBuilder(); sb.Append(WixFragment.ToWixString()); sb.Append("\r\n"); sb.Append("\r\n"); sb.Append(WixDirectory.ToWixString()); sb.Append("\r\n"); sb.Append("\r\n"); sb.Append(WixFeature.ToWixString()); return sb.ToString(); } }