上章描述了总体的操作,本章继续细化:
一:在线更新
如果能把文件列表里的文件全部替换是最好的选择。
但现实是:app.config ,web.config 这类数据经常是在布署后还要手工改动。把它替换了就得重配一次。
如果把它从更新列表里移除?也不行,第一次配置人员不可能全敲一遍。
只新增不覆盖?当加了新的配置项时,配置人员也得敲一遍。
方案一:在配置文件作出标记,指明哪些是不可覆盖的。。这样更新程序就把这一块取出,替换掉原文件里的标记块,再保存。
缺点是时间长了加上交接,这种标记可能就被忘却了。
方案二:把app.config直接视为只读文件,客户端程序弹出设置界面,如果有不同于app.config的配置,存到另一个文件里。
优点很明显,使用时大家都轻松。
缺点是要加相当的代码。
方案三:如果配置文件已经存在,就不覆盖了,换个名称保存。比如web.config.old, 配置人员自行比对,
看起来是不错的选择,毕竟配置文件就是让人改的。
二:发布程序
1:首先定义结构体:
public class ProgramList
{
public string appName { get; set; }//程序关键字
public string appNameCn { get; set; }//程序中文名
public string appDownPath { get; set; }//布署的目录。用于下载。
public string vssRelativePath { get; set; }//相对于vss根目录的路径。用于发布。
public string version { get; set; }//版本号。
}
1:程序在bin/debug目录直接运行时,可以根据bin/debug目录所在向上找到vss的根目录。
再然后叠加上上述的vssRelativePath,就可以得到本地的实际目录。
这样的优点是即使程序员的vss布署目录都不一样,一运行都可自动定位到正确的地方,条件是程序员自己的目录树结构要与VSS一致。
2:上述要求程序员下载源代码编译运行,但是并不是所有人都愿意这样干,很多人只是想直接运行。
所以发布程序优化为:如果发现本程序不在debug目录下,就提示程序员给出本地vss的根目录。
三:各种特殊情况:
1:现在有这种情况,一个程序有不同的配置。要发布几份,有的甚至只是改一个参数。怎么发布?
2:第二种情况,把程序名改了,原因是为了方便监控!!!变更作为在线更新的关键字(即程序名)实在不值得鼓励。
如果要支持的话,可以支持脚本,支持更新程序进行重命名?