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服务这种组合项目,在发布过程中以及,怎么创建自定义安装包来快速,部署到测试中,遇到的问题说全了,希望可以帮助到遇到类似问题的道友。。。
以后再整理文章的结构。。。
VS2017中使用组合项目_windows服务+winform管理_项目发布_测试服务器部署的更多相关文章
- Unity3D中利用Action实现自己的消息管理(订阅/发布)类
引言 一般的软件开发过程中,为了方便对项目进行管理.维护和扩展,通常会采用一种MVC框架,以将显示逻辑.业务逻辑和数据进行分离. 这在传统企业软件的开发中很常见,但我在使用Unity做游戏开发的时候却 ...
- 【DDD/CQRS/微服务架构案例】在Ubuntu 14.04.4 LTS中运行WeText项目的服务端
在<WeText项目:一个基于.NET实现的DDD.CQRS与微服务架构的演示案例>文章中,我介绍了自己用Visual Studio 2015(C# 6.0 with .NET Frame ...
- ThinkPHP公共配置文件与各自项目中配置文件组合的方法
ThinkPHP公共配置文件与各自项目中配置文件组合的方法 文章TAG:thinkphp 公共配置文件 时间:2014-11-25来源:www.aspku.com 作者:源码库 文章热度: 146 ℃ ...
- VS2017中建立ASP.NET MVC 4.0项目
新的项目需要运行在WIN2003上,又不想用ASPX了,只好用回ASP.NET MVC4.0了,可是在VS2017中已经没有MVC4的模板了,网上下载的安装了也没有,只好把以前的MVC4的项目拿 出来 ...
- STS热部署,springboot项目中修改代码不用重新启动服务
方法如下: 1.在pom文件中引入 devtools 依赖: <dependency> <groupId>org.springframework.boot</grou ...
- windows系统中ubuntu虚拟机安装及web项目到服务上(三)
项目在ubuntu虚拟机下的部署 一:将war从本地通过Xftp 4 传到虚拟机tomcat目录下的webapps目录下 2:修改tomcat下的server.xml <Host name=& ...
- 循序渐进开发WinForm项目(3)--Winform界面层的项目设计
随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...
- 基于dubbo构建分布式项目与服务模块
关于分布式服务架构的背景和需求可查阅http://dubbo.io/.不同于传统的单工程项目,本文主要学习如何通过maven和dubbo将构建分布项目以及服务模块,下面直接开始. 创建项目以及模块 ...
- .NET vs2010中使用IrisSkin2.dll轻松实现winForm窗体换肤功能
IrisSkin2.dll是一款很不错的免费皮肤控件,利用它可以轻松的实现winForm窗体换肤! 网上很多朋友说在VS2010中不能使用IrisSkin2.dll,我这里提供一个取巧的办法. Iri ...
随机推荐
- goroutine和线程区别
从调度上看,goroutine的调度开销远远小于线程调度开销. OS的线程由OS内核调度,每隔几毫秒,一个硬件时钟中断发到CPU,CPU调用一个调度器内核函数.这个函数暂停当前正在运行的线程,把他的寄 ...
- java 回调函数解读
模块间调用 在一个应用系统中,无论使用何种语言开发,必然存在模块之间的调用,调用的方式分为几种: (1)同步调用 同步调用是最基本并且最简单的一种调用方式,类A的方法a()调用类B的方法b(),一直等 ...
- @EnableTransactionManagement注解理解
@EnableTransactionManagement表示开启事务支持,在springboot项目中一般配置在启动类上,效果等同于xml配置的<tx:annotation-driven /&g ...
- float的范围和有效位
首先说一下: 范围是3.4E-38 ——3.4E+38,可提供7位有效数字. 上述这两个量都是近似值,各个编译器不太一样的. 下面我就将标准值是怎么定义的,和你说一下: 这个比较复杂,建议你找一下IE ...
- Centos下的apache2练习
前言: 我上星期一直在写代码忘记写博客了,明天回去补回来.脚本主要用于收集信息 今天刚刚学完apache.来做个总结,写的不好请多多指指出. 目标: Centos6.5的IP:192.168.1.21 ...
- 全局唯一ID发号器的几个思路
标识(ID / Identifier)是无处不在的,生成标识的主体是人,那么它就是一个命名过程,如果是计算机,那么它就是一个生成过程.如何保证分布式系统下,并行生成标识的唯一与标识的命名空间有着密不可 ...
- Linux网络简介
Linux的网络简介 1.TCP/IP协议簇 (通俗的解释就是为了网路传输指定的一种标准),它将网络划分为四层:应用层 .传输层.互联层 .网络接口层 . 基础层是网络接口层(说白了就是把帧格式的数 ...
- What is the best way to handle Invalid CSRF token found in the request when session times out in Spring security
18.5.1 Timeouts One issue is that the expected CSRF token is stored in the HttpSession, so as soon a ...
- tkinter中树状结构的建立(十四)
树状结构的建立 import tkinter from tkinter import ttk wuya = tkinter.Tk() wuya.title("wuya") wuya ...
- EF生成模型出现异常:表“TableDetails“中列“IsPrimaryKey”的值为DBNull解决方法
Entity Framework连接MySQL时:由于出现以下异常,无法生成模型:"表"TableDetails"中列"IsPrimaryKey"的值 ...