zoukankan      html  css  js  c++  java
  • 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("
    ");
                sb.Append("
    ");
                sb.Append(WixDirectory.ToWixString());
                sb.Append("
    ");
                sb.Append("
    ");
                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 "---旧工程不存在---
    ";
               }
               var sb = new StringBuilder();
               sb.Append(CompareDirectoryRefs());
               sb.Append(CompareDirectory());
               sb.Append(CompareComponeRefs());
               if (sb.Length == 0)
               {
                   sb.Append("
         这两个工程文件一致!   ");
               }
               return sb.ToString();
           }

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

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

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

     http://pan.baidu.com/s/1ntmolhZ

      

  • 相关阅读:
    怎么分辨是eclipse还是 android studio开发的
    一个帖子学会Android开发四大组件
    Android Studio ADB响应失败解决方法
    500 OOPS: could not read chroot() list file:/etc/vsftpd/chroot_list
    理解 with递归调用 Sqlserver 树查询
    SQLServer树查询
    数字证书原理【转】
    linux 基础命令
    项目经验分享[转自min.jiang]
    ios
  • 原文地址:https://www.cnblogs.com/stoneniqiu/p/4579103.html
Copyright © 2011-2022 走看看