VS2017中使用组合项目_windows服务+winform管理_项目发布_测试服务器部署

  前言:做为一名C#开发人员,避免不了常和windows服务以及winform项目打交道,本人公司对服务的管理也是用到了这2个项目的组合方式进行:由于服务项目是没法直接安装到计算器中,须要使用命令借助微软的一个程序使用,所以作服务安装工做的活就交给winform去作了。html

  关于window服务+winform项目的建立过程,可参考个人另外一篇文章:使用C#开发windows服务定时发消息到钉钉群_群组简单消息程序员

  这边文章只探讨:组合项目在发布及部署过程当中遇到的不少问题。   如今建设你已经顺序建立了这2个项目,并完成了功能的开发:windows

  开发工具:VS2017,操做系统:windows安全

  

  问题汇总以下:服务器

  发布错误1-未能在ClickOnce Bootstrapper中找到setup.bin?app

        

        

 

   解释:首先你要确保你的VS安装了ClickOnce功能,没有开启的话,开启一下,使用VS安装程序便可开启。工具

  处理方案一:网上扒了一大堆资料,整体意思就是说:缺乏SDK,须要从新安装一下: Microsoft Windows SDK for Windows 7 and .NET Framework 4post

  参考这边文章:https://stackoverflow.com/questions/11139538/could-not-find-required-file-setup-bin开发工具

 

  处理方案二:若是上面解决不了你的问题,你能够经过VS2017安装程序中的组件安装,安装一下组件:Visual Studio SDK,以下图:测试

      

 

 

  发布错误2-清单中的引用与下载的程序集标识不匹配?

       

   解释:这个问题固然也google了,意思就是你须要改下项目的属性-->安全性->  勾选:启用ClickOnce安全设置,和,这是彻底可信任的应用程序。   参考文章:https://blog.csdn.net/soft_123456/article/details/38080667

  也有人解释的更深一步,说是项目的引用程序集版本号与实际程序集版本号不一致致使的,参考文章:https://blog.csdn.net/linybo/article/details/44699315

  我本身走的是第一个方案,大家能够本身去研究去尝试,时间有限,事情繁多,没有仔细去试。

 

  小结:其实上面2个错误,虽然都尝试过,可是最好仍是并无真正解决个人问题,我发布后仍是出现相似莫名其妙的错误,这可能也与个人一个操做过程有关(我本来用的VS2015,又安装了VS2017,装好17后就把15给卸载了

个人终极解决方案是:使用VS2017自带的安装程序,从新又修复了一下VS的整个程序,而后上面2个问题就都迎刃而解了。不明觉厉! 可能真的我操做过程致使的,而后若是你修复VS程序后还不行,能够参考上面的解决方案,逐个去试吧,咱们程序员就爱干这个。

  这篇文章的主要内容是下面:

 

  发布错误3-正常状况下,winform项目和服务项目没有直接关联关系,winform能够将服务EXE路径写死,进行服务的安装和卸载便可。   可是本人就是想搞一个测试的按钮,在winform中引用服务项目,调用服务中的类进行方法测试,而服务在自动运行的过程当中就又跟winform程序无关了。  项目是能够经过VS直接使用发布功能了。

  我这里只发布了winform项目,因为项目存在引用关系,winform发布的文件中自动包含了一个服务的EXE程序集,过高兴了,就不用再单独发布服务项目了,可是发布后,在安装服务后遇到了一个关键问题:服务的程序集EXE,是deploy类型,没法直接使用,太奇怪了,后来发现这块是能够设置的:项目属性->发布->安装模式和设置选项->部署-> 取消勾选:使用".deploy文件扩展名",我是这么解决的,大家自由发挥哈!!

  

 

  下一步:服务是能够正常安装了,没毛病,可是服务运行过程当中,读配置文件app.config时(我加了日志发现的,你不加日志是发现不了的,除非报异常),找不到数据了?缺乏服务的配置文件?

  其实想一想也是,即便已经有了EXE程序集,可是我只发布了一个winform项目,那发布文件中,确定只有一个winform的配置文件了,怎么可能会有服务的配置文件呢,服务的EXE也只是一个程序集供winform使用,就好像一个DLL同样,在你winfrom只用调用服务类中方法时,走的也是winform的配置文件。    可是关键是脱离winform的管理后,服务会独立运行,若是服务本身有配置文件,那服务执行过程当中确定会出现问题,怎么去保证:2个配置文件同时存在,且又不用发布2个项目呢?

(若是你的服务项目不须要配置文件除外;若是你2个项目分开发布也没有问题,分开发布须要在winform中指定服务EXE程序集的位置,不能使用引用的EXE程序集,由于它默认没有配置文件,除非你不要配置文件;)

  最简单的解决方案:咱们不使用发布功能不就完了,编译后的项目,bin/debug目录下的文件是能够直接使用的,直接Copy到服务器就能够了。这种方案,我们研发人员固然OK了,咱们公司就是这么作的,不须要发布,就再调整一下服务的路径就能够在测试服务器用了。

  固然个人项目是,经过安装程序,发布功能,走一个包装过程,而后小白也能直接安装的,那么接着往下看:

  解决方案一:像上面分析同样,把服务的配置文件数据写死到服务中。    太粗暴了,不便于维护。

  解决方案二:2个项目分开发布,各个走各自的配置,互不干扰,可是须要在winform中指定服务程序集EXE的具体路径。  稍微麻烦

  推荐解决方案三:其实本身看,winform的发布文件能够看出,发布的文件其实也就是一个安装程序,发布选项中,能够查看程序集文件,设置必须的系统组件,清单,说明等,那么能够总结为:如何在安装程序中,添加2个配置文件进去?

  后来在发布里面始终找不到答案,太TM烦人了,不事后来想到了一个解决方案,就是VS是有自定义安装程序的项目,叫:Setup Project,VS2010,2015自带这个项目的,可是VS2017给砍掉了,作成了一个插件,须要本身去安装,妹的!

  大家能够搜索:Microsoft Visual Studio 2017 Installer Projects,在VS的插件扩展中,或者VS官网均可以。我是经过官网装的:https://marketplace.visualstudio.com/items?itemName=visualstudioclient.MicrosoftVisualStudio2017InstallerProjects

  装好后就有了,经过这个自定义的安装项目,咱们能够把须要文件都扔进去,固然还须要把服务的配置文件一并扔进去。

 

  详情介绍请看个人另外一篇博文:http://www.javashuo.com/article/p-zxneayrq-bx.html

 

   总结:因为没有太多的时间整理,先这样写吧,基本上把我本身使用这个winform+window服务这种组合项目,在发布过程当中以及,怎么建立自定义安装包来快速,部署到测试中,遇到的问题说全了,但愿能够帮助到遇到相似问题的道友。。。

之后再整理文章的结构。。。

相关文章
相关标签/搜索