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。

时间: 2024-08-29 03:46:51

091023 T GIX4 项目中的 智能部署 和 智能客户端的相关文章

asp.net MVC项目中 没有easyui插件的智能提示

问题描述 asp.net MVC项目中 没有easyui插件的智能提示 5C vs2015 中的mvc4项目,已经分别把jQuery.min.js jquery.easyui.min.jseasyui-lang-zh_CN.js依次拖入,写js代码的时候 智能提示只有jquery中的属性和方法 没有easyui的(例如$.messager就出不来智能提示),但是可以正常执行出来插件效果,尝试编辑cshtml.html格式的文件都不提示,尝试把 jquery.easyui.min.js的文件名改为

信息系统开发平台OpenExpressApp - ClickOnce智能部署

这里讲的是OpenExpressApp的部署方案.主要使用的是ClickOnce作为实施方案来实现:智能部署和智能客户端.不过,这里的使用方式跟以往的不太一样--     部署概述     OpenExpressApp中,界面是自动生成的.而框架使用者所开发的应用程序(以下简称客户程序),只需要按照特定的格式约定编写自己的业务逻辑模型类,然后与框架一同发布,就可以直接运行并显示出所有的界面了,这样就可以实现比较大粒度的重用.如图:     也就是说,当框架使用者使用本框架时,得到的是已经通过Cl

API项目中 官方客户端不再是可有可无的

在API项目中,有官方支持的客户端才能给API社区传达积极的信息. 没有官方支持客户的API就像是没有方向盘的汽车.可能是辆好车,但是却哪儿也去不了. 当然可以做一个方向盘,但这会是一项耗时的工作而且还会有风险.集成"方向盘"这件事情制造商当然比你更在行了. 虽然承认这一点有点尴尬,但我也曾经是不愿替自己的API项目开发官方客户端的.我们会说:"我们不能所有事情都支持.手上积压的无需学习一门全新语言的工作就已经够多了."虽然这样的心态不算坏,但却有点误导人. 最重要

web and jmf-WEB项目中导入JMF jar包部署到tomcat上出错

问题描述 WEB项目中导入JMF jar包部署到tomcat上出错 错误信息如下: 解决方案 Eclipse部署Java Web项目到Tomcat出错 解决方案二: 违规访问造成的.换一个低版本的包试试

web项目在eclipse中运行正常 部署到tomcat中运行报spring context错误

问题描述 web项目在eclipse中运行正常 部署到tomcat中运行报spring context错误 20C 解决方案 quatrz配置有问题参考:http://blog.csdn.net/kingzuo/article/details/12572881http://www.cnblogs.com/kay/archive/2007/11/02/947372.html

《BI项目笔记》SSAS部署时发生的问题——元数据管理器中存在错误 解决办法

原文:<BI项目笔记>SSAS部署时发生的问题--元数据管理器中存在错误 解决办法 在生成和部署期间出错.是否继续?解决办法: 用Microsoft SQL Server Management Studio 连接Analysis Services 然后删除多维数据库,重新布署.这样就OK的.

虚拟路径-jetty部署的项目,如何将项目中要下载的资源,统一放置在项目外的一个路径

问题描述 jetty部署的项目,如何将项目中要下载的资源,统一放置在项目外的一个路径 如题:为了优化项目,现在要将项目内需要下载的资源,如:表格.图片等,统一放置在硬盘上的一个固定的目录上,该如何做呢,是要设置jetty.xml文件吗,jetty.xml文件在哪个位置,为什么我找不到?

机器学习项目中的数据预处理与数据整理之比较

要点 在常见的机器学习/深度学习项目里,数据准备占去整个分析管道的60%到80%. 市场上有各种用于数据清洗和特征工程的编程语言.框架和工具.它们之间的功能有重叠,也各有权衡. 数据整理是数据预处理的重要扩展.它最适合在可视化分析工具中使用,这能够避免分析流程被打断. 可视化分析工具与开源数据科学组件之间,如R.Python.KNIME.RapidMiner互为补充. 避免过多地使用组件能够加速数据科学项目.因此,在数据准备步骤中利用流式获取框架或流式分析产品会是一个不错的选择. 机器学习和深度

用户控件和自定义控件的比较及在项目中的应用

比较|控件|项目 用户控件和自定义控件的比较及在项目中的应用 摘 要 本文档描述了服务器控件的基本概念,以及用户控件和自定义控件在部署.创建.内容和布局.设计期行为.性能几个方面的比较,然后给出一个在项目开发中服务器控件使用的建议,最后给出一个用户控件的创建和调用的例子. 关 键 词 Server Control 服务器控件 User Control 用户控件,ASP.NET服务器控件的一种(一般后缀名为.ASCX文件) Custom Control 自定义控件,ASP.NET服务器空间的一种(