在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前言:作为一名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服务这种组合项目,在发布过程中以及,怎么创建自定义安装包来快速,部署到测试中,遇到的问题说全了,希望可以帮助到遇到类似问题的道友。。。 以后再整理文章的结构。。。
|
请发表评论