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

调用它的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 == )
{
sb.Append("\r\n 这两个工程文件一致! ");
}
return sb.ToString();
}

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

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

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

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

Wix 安装部署教程(十一) ---QuickWix的更多相关文章

  1. WIX 安装部署教程(六) 为你收集的七个知识点

    前段时间整理5篇WIX(Windows Installer XML)的安装教程,但还不够完善,这里继续整理了七个知识点分享给大家.WIX最新版本3.8,点击下载 WIX安装部署(一)同MSBuild自 ...

  2. Wix 安装部署教程(九) --用WPF做安装界面

    经常安装PC端的应用,特别是重装系统之后,大致分为两类.一类像QQ,搜狗输入法这样的.分三步走的:第一个页面可以自定义安装路径和软件许可.第二个页面显示安装进度条,第三个页面推荐其他应用.先不管人家怎 ...

  3. Wix 安装部署教程(十六) -- 自动生成多语言文件

    因为持续集成需要,所有项目编译完之后生成一个多语言的安装包.之前生成mst文件都是手动操作,而且mst文件必须每次重新和新的安装包“关联”,否则中文的安装包去调用英文的资源的时候就会报类似于“类型转换 ...

  4. Wix 安装部署教程(十二) -- 自动更新WXS文件

    上一篇分享了一个QuickWIX,用来对比两个工程前后的差异,但是这样还是很繁琐,而且昨天发现有Bug,目录对比有问题.这次改变做法,完全让程序自动去更新WXS文件,然后再用CCNet去自动编译,这样 ...

  5. Wix 安装部署教程(四) 添加安装文件及快捷方式

    通过之前三篇的介绍,大家对wix的xml部署方式也应该有一些认识,今天天气不错,再来一发.主要介绍桌面,开始菜单,卸载等功能的如何添加.希望园友们支持! 一.如何添加文件 Demo打包程序很简单,就一 ...

  6. Wix 安装部署教程(十五) --CustomAction的七种用法

    在WIX中,CustomAction用来在安装过程中执行自定义行为.比如注册.修改文件.触发其他可执行文件等.这一节主要是介绍一下CustomAction的7种用法. 在此之前要了解InstallEx ...

  7. Wix 安装部署教程(十三) -- 多语言安装包

    这几天摸索WIX的多语言安装包(这里是Wix的setup 工程,不是Bundle),终于走通了,感谢网友uni的指点.WIX的多语言安装包能够根据系统环境自动切换界面语言,你也可以通过命令指定语言.下 ...

  8. Wix 安装部署教程(十) --来,用WPF做个漂亮的安装界面

    在上一篇中曾留下两个问题,.Net捆绑安装不触发以及路径选择的问题现在都已经解决,这段时间花的最多的地方还是WPF调样式上面,奈何WPF功力不够,暂时还是没有达到自己想要的效果.另外ViewModel ...

  9. Wix 安装部署教程(七) 获取管理员权限

    应用程序运行的时候,难免会读写文件,产生新的数据.但Program Files下的文件是不能随便更改,Win7下如果没有权限,将会被拒绝.我现在有两种方式,一种是将数据路径移到Program Data ...

随机推荐

  1. tfs 删除工作区

    公司员工离职后,有部分文件迁出,有没有tfs密码的情况下,考虑删除工作区,在网上找到方法实践有效,在次记录下. 在命令提示行下进入 “...\Microsoft Visual Studio 8\Com ...

  2. Linux(Ubuntu 14.0)

    开始了Mono的学习.学习了Mono for Android之后,编译一些小的APK,总发现这些APK文件很大,额,真心不知道为什么,那么,就让我们从头开始学期了,Android是基于Linux的,那 ...

  3. 微信小程序0.11.122100版本新功能解析

    微信小程序0.11.122100版本新功能解析   新版本就不再吐槽了,整的自己跟个愤青似的.人老了,喷不动了,把机会留给年轻人吧.下午随着新版本开放,微信居然破天荒的开放了开发者论坛.我很是担心官方 ...

  4. ZooKeeper事务日志记录器SyncRequestProcessor

    SyncRequestProcessor作为一个ZooKeeper中的一个关键线程(ZooKeeperCriticalThread),是ZooKeeper请求处理链中的事务日志记录处理器,其主要用来将 ...

  5. C# 网络与Cmd命令

    网络命令行: 1 - ping 2 - ipconfig 本机网络配置情况 3 - net 4 - arp  网络网卡物理/ip地址对应用 5 - tracert 列举数据报到达目标地所经过的网关 6 ...

  6. 不支持C++11 decltype的噩耗

    前言:因为公司现在使用vs2008,所以很多c++11的新特性还未能使用,导致写了很多冤枉代码. 最初引擎的数学库非常简单,使用起来也不方便,例如: float FastLerp(const floa ...

  7. 在rails中 Rendering Partials through Ajax

    之前做.net的时候,自己做了一个showcontent的插件,用来加载页面的局部partial 之前采用的是ashx的方式 但rails里面不太方面,今天找到一个比较好的方法,试验成功 起初网上找到 ...

  8. mac 日式键盘反斜线\

    日式键盘 没有反斜线\, 但是有快捷键可以输入:alt+¥  (英文模式下)

  9. hdoj 1596 find the safest rode

    Problem Description XX星球有很多城市,每个城市之间有一条或多条飞行通道,但是并不是所有的路都是很安全的,每一条路有一个安全系数s,s是在 0 和 1 间的实数(包括0,1),一条 ...

  10. SharePoint 2013开发入门探索(一)- 自定义列表

    在SharePoint 2013中创建自定义列表的方式有很多,在网站内容页面添加应用程序就可以创建(站点内容-〉 您的应用程序),也可以通过SharePoint Designer 2013创建,而本文 ...