前言:作为一名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管理_项目发布_测试服务器部署的更多相关文章

  1. Unity3D中利用Action实现自己的消息管理(订阅/发布)类

    引言 一般的软件开发过程中,为了方便对项目进行管理.维护和扩展,通常会采用一种MVC框架,以将显示逻辑.业务逻辑和数据进行分离. 这在传统企业软件的开发中很常见,但我在使用Unity做游戏开发的时候却 ...

  2. 【DDD/CQRS/微服务架构案例】在Ubuntu 14.04.4 LTS中运行WeText项目的服务端

    在<WeText项目:一个基于.NET实现的DDD.CQRS与微服务架构的演示案例>文章中,我介绍了自己用Visual Studio 2015(C# 6.0 with .NET Frame ...

  3. ThinkPHP公共配置文件与各自项目中配置文件组合的方法

    ThinkPHP公共配置文件与各自项目中配置文件组合的方法 文章TAG:thinkphp 公共配置文件 时间:2014-11-25来源:www.aspku.com 作者:源码库 文章热度: 146 ℃ ...

  4. VS2017中建立ASP.NET MVC 4.0项目

    新的项目需要运行在WIN2003上,又不想用ASPX了,只好用回ASP.NET MVC4.0了,可是在VS2017中已经没有MVC4的模板了,网上下载的安装了也没有,只好把以前的MVC4的项目拿 出来 ...

  5. STS热部署,springboot项目中修改代码不用重新启动服务

    方法如下: 1.在pom文件中引入  devtools  依赖: <dependency> <groupId>org.springframework.boot</grou ...

  6. windows系统中ubuntu虚拟机安装及web项目到服务上(三)

    项目在ubuntu虚拟机下的部署 一:将war从本地通过Xftp 4 传到虚拟机tomcat目录下的webapps目录下 2:修改tomcat下的server.xml  <Host name=& ...

  7. 循序渐进开发WinForm项目(3)--Winform界面层的项目设计

    随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...

  8. 基于dubbo构建分布式项目与服务模块

      关于分布式服务架构的背景和需求可查阅http://dubbo.io/.不同于传统的单工程项目,本文主要学习如何通过maven和dubbo将构建分布项目以及服务模块,下面直接开始. 创建项目以及模块 ...

  9. .NET vs2010中使用IrisSkin2.dll轻松实现winForm窗体换肤功能

    IrisSkin2.dll是一款很不错的免费皮肤控件,利用它可以轻松的实现winForm窗体换肤! 网上很多朋友说在VS2010中不能使用IrisSkin2.dll,我这里提供一个取巧的办法. Iri ...

随机推荐

  1. 航遇项目react踩坑

    1.iconfont应用: a.正常用法如下 <span className='iconfont' > iconfont的代码,例如: </span> b.react不能动态 ...

  2. servlet简介及生命周期

    Servlet 简介 Servlet 是什么? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上 ...

  3. django+appium实现UI自动化测试平台---构思版

             背景 UI自动化,在进行的过程中,难免会遇到平台化, 在实际的工作中,有的领导也会想要实现自动化测试的平台化.自动化平台化后,有了更为实际的成果, 在做UI自动化,很想吧现在的自动化 ...

  4. 【转】详解JavaScript中的异常处理方法

    有三种类型的编程错误:(1)语法错误和(2)运行时错误(3)逻辑错误:语法错误: 语法错误,也被称为解析错误,在编译时进行传统的编程语言,并出现在JavaScript解释时. 例如,下面一行将导致一个 ...

  5. C++相关:C++的IO库

    前言 基本的IO库设施 istream(输入流类型),提供输入操作. ostream(输出流类型),提供输出操作. cin,一个istream对象,从标准输入读取数据. cout,一个ostream对 ...

  6. capwap学习笔记——初识capwap(三)(下)

    2.5.6.25 Image Data to Reset WTP下载image后重启,重新设置DTLS连接 ¢  WTP: ü   当image的下载完成,或者ImageDataStartTimer定 ...

  7. 唱吧DevOps的落地,微服务CI/CD的范本技术解读----最大的难点并不是实际业务代码的编写,而是服务的监控和调试以及容器的编排

    1.业务架构:从单体式到微服务 K歌亭是唱吧的一条新业务线,旨在提供线下便捷的快餐式K歌方式,用户可以在一个电话亭大小的空间里完成K歌体验.K歌亭在客户端有VOD.微信和Web共三个交互入口,业务复杂 ...

  8. Dreamweaver无法启动:xml parsing fatal error..Designer.xml错误解决方法

    xml parsing fatal error:Invalid document structure,line:1,file:C:\Documents and Settings\Administrat ...

  9. python 产生token及token验证

    1.前言 最近在做微信公众号开发在进行网页授权时,微信需要用户自己在授权url中带上一个类似token的state的参数,以防止跨站攻击.在经过再三思考之后,自己试着实现一个产生token和验证tok ...

  10. upload.go

    package api import (     "os"     "bytes"     "mime/multipart"     &qu ...