深入学习ing

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

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

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

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

  开发工具:VS2017,操作系统:windows

  

  问题汇总如下:

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

        

        

 

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

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

  参考这边文章: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

  装好后就有了,通过这个自定义的安装项目,我们可以把需要文件都扔进去,当然还需要把服务的配置文件一并扔进去。

 

  详情介绍请看我的另一篇博文:https://www.cnblogs.com/lxhbky/p/10695527.html

 

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

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

 

posted on 2019-03-28 17:36  深入学习ing  阅读(7840)  评论(0编辑  收藏  举报

导航