博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Wix 安装部署教程(十一) ---QuickWix
阅读量:6440 次
发布时间:2019-06-23

本文共 2908 字,大约阅读时间需要 9 分钟。

原文:

      这次发布的是这两天做的一个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   {       ///        /// 返回wix标签       ///        /// 
string ToWixString(); }

  2.WixProj包含WixDirectory,WixFragment,WixFeature,是Wix对象最父类的元素。也是用来保存xml的对象。

[Serializable]    public class WixProj : IWixBase    {       private WixDirectory _wixDirectory;       private WixFragment _wixFragment;       private WixFeature _wixFeature;       ///        /// 比较Directory       ///        public WixDirectory WixDirectory       {           get { return _wixDirectory??(_wixDirectory=new WixDirectory()); }           set { _wixDirectory = value; }       }       ///        /// 比较Files       ///        public WixFragment WixFragment       {           get { return _wixFragment??(_wixFragment=new WixFragment()); }           set { _wixFragment = value; }       }       ///        /// 比较ComponentRef       ///        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();        }    }
View Code

 调用它的ToWixString方法就可以获得整个工程wix元素。

 3.WixComparator,就是用来比较工程用的,包含两个WixProj对象,一个用来加载xml,一个即当前工程。

    它的BeginCompare方法就是用来开始比较差异的。也是分三个部分去比较。比如对于files 要比较出新增的、删除的和修改的。目录和组件不包含修改部分(他们就一个id)。

///        /// 开始比较       /// 返回files差异       /// 返回Components差异       /// 返回Directory差异       ///        /// 
比较结果
public string BeginCompare() { //先比较files //就需要比较目录 //如果之前的不存在 就不必要比较 if (BeforeWixProj==null) { return "---旧工程不存在---\r\n"; } var sb = new StringBuilder(); sb.Append(CompareDirectoryRefs()); sb.Append(CompareDirectory()); sb.Append(CompareComponeRefs()); if (sb.Length == 0) { sb.Append("\r\n 这两个工程文件一致! "); } return sb.ToString(); }

而其他wix对象都有一个Compare方法。用来和同类型的对象比较。该对象在GenerateWiXml类中进行初始化。

4.Wixconfig中包含一些配置信息,比如注册文件、过滤后缀,初始组件等。 

 

小结:接下来的想法是能够在打包工程编译之前就自动修改好wxs文件,不然每次要打开工程修改确实麻烦。下面是源代码,有兴趣的一起折腾交流。希望本文对你有帮助。

 

  

 

转载地址:http://fxdwo.baihongyu.com/

你可能感兴趣的文章
第四周作业
查看>>
Linux上的文件查找工具之locate与find
查看>>
LeetCode-Move Zeroes
查看>>
结对第2次作业——WordCount进阶需求
查看>>
Python面向对象之面向对象基本概念
查看>>
PDB文件:每个开发人员都必须知道的
查看>>
脸上有酒窝,脖子后有痣,胸前有颗痣,此三种人不能错过
查看>>
用VC++开发Oracle数据库应用程序详解2
查看>>
bzoj1305
查看>>
SpringAOP面向切面编程
查看>>
[USACO12JAN]Video Game Combos
查看>>
Multiset的使用 TOJ 2196.Nuanran's Idol II 与 UVA11136 Hoax or what
查看>>
Linux安装相关
查看>>
WIN7 下 在cmd 命令中 进入某个目录 的方法
查看>>
查看被锁的表和解锁
查看>>
canvas自适应圆形时钟绘制
查看>>
币值转换编程总结
查看>>
javascript中关于value的一个小知识点(value既是属性也是变量)
查看>>
cookie创建,使用 . session与Cookie区别
查看>>
截取字符串 substring substr slice
查看>>