091023 T GIX4 项目中的 智能部署 和 智能客户端

先说一下ClickOnce的使用方法: 先给一个要发布的工程设置安全和签名。然后发布到iis中。当用户访问该iis目录下的.application文件时,就会自动安装整个应用程序。

再说一下我们目前的应用程序。相对还是比较复杂的,分为框架部分和特定应用程序部分。其中的框架部分,以后会作为开源框架发布。由于是AutoUI,框架部分就包含了生成最后客户端运行的exe的工程。而特定的应用程序只需要实现自己的类库和模块(Module)。最后发布的时候,需要把生成好的类库和Module放到exe文件所在目录的子目录Library和Module当中,框架会自动寻找这两个目录中的文件,进行加载。

这时候,我们的发布就比较麻烦了。 先要把框架直接发布好,这样其它团队就可以直接使用。但是其中包括安全和签名,和所有文件hash值。这时候,如果其它使用这个框架的团队进行发布时,必须要把他们自己的类库和Module放入到已经打包好的程序当中。然后使用MS一个开源的工具(ManifestManagerUtility.exe)对已经生成好的.application文件进行修改,把类库和Module添加到这个文件中,这样,客户端在装程序的时候,才会也把这些文件一起安装到客户端中。这时,这个软件也会再次对每个文件生成hash值。 但是,这样直接加了以后,有两个问题。 一是他们在类库和module发布更新的版本时,为了避免再次打开那个MS的软件进行手工编辑,应该实现自动化更新application文件。 二是新的文件生成的hash值,肯定不会和原有的hash值相同。

所以,我只有自己把MS的那个软件的源码给研究完,然后自己写了一个控制台程序实现以上功能。 其中,遇到一个MS比较缺陷的设计,害得我是查了好半天!当直接复制MS程序中的代码: Manifest.ResolveFiles(); Manifest.UpdateFileInfo(); 来进行更新时,老是不能把文件的hash值也一并更新。其原因在于,UpdateFileInfo更新hash值时,是使用每个AssemblyReference对象的ResolvedPath来计算hash,而在ResolveFiles方法里面,这个属性值的计算是调用SourcePath和Environment.CurrentDirectory计算出来的。此时,这个Environment.CurrentDirectory文件夹路径是我的这个控制台程序所在路径,所以并不能正确计算出.application所在文件夹中的文件的路径。找不到文件,自然hash值就更新失败了。

解决方案: 一:在更新前,计算出各个AssemblyReference的SourcePath值,然后再调用ResolveFiles方法。(我使用的是此法,因为MS软件中有现成的方法。) 二:使用ResolveFiles的重载ResolveFiles(string[] searchPaths)指定搜索的文件夹即可。

参考: 继承层次 : ApplicationManifest : AssemblyManifest : Manifest。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏BigNerdCoding

Rails 部署总结

学 Ruby 和 Rails 有一段时间了,后面准备也准备把站点换了。不过开始开发之前,我先把 Rails 部署的坑先踩了。之所以部署先行是因为之前 Djang...

48050
来自专栏LhWorld哥陪你聊算法

hadoop集群篇--从0到1搭建hadoop集群

本来有套好好的集群,可是不知道为什么虚拟机镜像文件损坏,结果导致集群不能用。所以不得不重新搭套集群,借此机会顺便再重新搭套吧,顺便提醒一句大家,自己虚拟机的集群...

17010
来自专栏枕边书

Linux - 请允许我静静地后台运行

前言 常在 linux 下玩耍的开发者肯定会经常遇到需要对进程调度的情况,在 windows 中点击 最小化 去干别的就 OK 了,那么在 linux 下怎么办...

26150
来自专栏破晓之歌

15款Django开发常用软件包 原

1. Python social auth 一款社交账号认证/注册机制,支持Django、Flask、Webpy等在内的多个开发框架,提供了约50多个服...

7920
来自专栏懒人开发

bpkg工具

最近接手一个项目 本来是jenkinsfile相关, 但是由于这里很多实现都是用的shell 并且还是用的 bpkg 做的管理, 再在bpkg基础上, 写了...

18830
来自专栏互扯程序

java 诊断工具—— Arthas

该说不说!小编做的这些功能,最讨厌的就是优化!某些前辈大佬写的代码小辈我实在不敢恭维!那逻辑!那sql!

23110
来自专栏枕边书

LINUX下的PHP

由于linux系统的稳定性,大部分的PHP服务器都被部署在linux上,而且像redis等扩展在linux能得到更好的支持,所以对于PHP程序员来说,使用lin...

42280
来自专栏Web项目聚集地

MyBatis-逆向工程「Generator使用指南」

当你利用搜索引擎搜索Maven会出来很多名词:对象模型、标准集合、依赖管理系统这是啥啊?差不多得你会用了Maven才会理解这些名称吧,我找到了一个博主的博客

17320
来自专栏Sorrower的专栏

详尽! Win10安装Java8+Tomcat9!

Java也好, Tomcat也好, 都是很实用的啦, 早点掌握还是有必要的. 喜欢记得点赞哦, 有意见或者建议评论区哦, 当然暗中关注我也是可以的.

39030
来自专栏后端技术探索

api安全授权调用--OAuth协议详解!

OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。

8920

扫码关注云+社区

领取腾讯云代金券