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

來源:互聯網
上載者:User

標籤:

      這次發布的是這兩天做的一個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

 

  

 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.