Wix 安装部署教程(十一) ---QuickWix

简介: 原文:Wix 安装部署教程(十一) ---QuickWix      这次发布的是这两天做的一个WIX工具QuickWIX,主要解决两个问题点1.对大文件快速生成wix标签(files,Directories,ComponentRef);2.比较前后两次工程的差异。
原文: Wix 安装部署教程(十一) ---QuickWix

      这次发布的是这两天做的一个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();
        }
    }
View Code

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

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

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

  /// <summary>
       /// 开始比较
       /// 返回files差异
       /// 返回Components差异
       /// 返回Directory差异
       /// </summary>
       /// <returns>比较结果</returns>
       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://pan.baidu.com/s/1ntmolhZ

 

  

 

目录
相关文章
|
XML 数据格式 Windows
WIX 安装部署教程(六) 为你收集的七个知识点
原文:WIX 安装部署教程(六) 为你收集的七个知识点  前段时间整理5篇WIX(Windows Installer XML)的安装教程,但还不够完善,这里继续整理了七个知识点分享给大家。WIX最新版本3.
1818 0
|
3月前
|
开发工具 图形学 Android开发
从零开始的unity3d入门教程(一)----环境配置
该文章是《从零开始的Unity3D入门教程》系列的第一篇,详细介绍了Unity3D的环境配置过程,包括注册Unity账户、下载安装Unity Hub和Unity编辑器、配置许可证、创建Unity项目、下载安装Visual Studio 2022以及将Unity与Visual Studio相关联等步骤。
从零开始的unity3d入门教程(一)----环境配置
|
Ubuntu Linux 开发工具
嵌入式Linux开发环境搭建之四----Vim的安装
嵌入式Linux开发环境搭建之四----Vim的安装
89 0
|
6月前
|
存储 NoSQL 容灾
Neo4j【环境部署 01】图形数据库(简介+下载地址+安装+配置+demo源码+学习教程地址)
Neo4j【环境部署 01】图形数据库(简介+下载地址+安装+配置+demo源码+学习教程地址)
388 1
|
测试技术
loadrunner入门教程(20) --场景创建
对人工场景和面向目标场景的介绍
192 0
loadrunner入门教程(20) --场景创建
|
Web App开发 安全 Shell
【PHP快速入门】详细笔记---精简版(下)
【PHP快速入门】详细笔记---精简版
124 0
【PHP快速入门】详细笔记---精简版(下)
|
安全 Java Linux
【PHP快速入门】详细笔记---精简版(上)
【PHP快速入门】详细笔记---精简版
113 0
【PHP快速入门】详细笔记---精简版(上)
|
传感器 编解码 5G
Unity配置Android开发环境与第一个Demo
ARFoundation之路-环境配置(Android)
546 0
Unity配置Android开发环境与第一个Demo
|
自然语言处理 数据库 Windows
Wix 安装部署教程(十三) -- 多语言安装包
原文:Wix 安装部署教程(十三) -- 多语言安装包       这几天摸索WIX的多语言安装包(这里是Wix的setup 工程,不是Bundle),终于走通了,感谢网友uni的指点。WIX的多语言安装包能够根据系统环境自动切换界面语言,你也可以通过命令指定语言。
1837 0
|
XML C# 数据格式
Wix 安装部署教程(九) --用WPF做安装界面
原文:Wix 安装部署教程(九) --用WPF做安装界面       经常安装PC端的应用,特别是重装系统之后,大致分为两类。一类像QQ,搜狗输入法这样的。分三步走的:第一个页面可以自定义安装路径和软件许可。
1623 0
下一篇
无影云桌面