一次陈旧项目的升级发布之路

一、本机环境 (VS 生成、发布)

1、添加项目到解决方案,修改项目引用,修改生成路径,除了XXXXXXX.Web都生成到XXXXX\bin  下【这种方式不太好 ,bin 中既有引用的dll ,也有生成的dll,需要在.gitignore文件中添加忽略,把项目生成的dll文件忽略掉】

     (修改项目引用的时候发现了循环引用,把相互依赖的地方找出来,把相关代码都移到一个项目中。)

2、源码中XXXXXX.Web 项目目录中又包含了十几个web项目,把他们中项目相关的文件统统删除(.csproj    licenses.licx   assembly    )  只把原项目中的页面和.cs等文件作为web项目中的一个文件夹中保留。

3、重新生成发现几千个错误,发现多数是由于几个web子项目中有很多重复的类,依次比较  ,完全相同的只留一个,不同的进行合并,尽量不要改原来的命名空间,这样即使是重复的类也可以用命名空间区分开。其他一些错误比较琐碎,不具有代表性。

4、项目迁移到vs 2013/2015   有几个项目是.net 2.0版本的  升级到3.5   ,同样解决了N个不具有代表性的琐碎问题。终于生成成功了。

5、运行,报错数据库连接打不开,调试发现  在打开连接时报错  没有注册oraOLEDB   ,最后发现解决方式:重装oracle 客户端 先装64位(自定义,全选),再装32位 到不同目录(管理员模式)

   【后来发现可能是由于发布后bin文件夹中也有Domain.xml文件导致的,把项目中Domain.xml改为不复制或许可以不用动Oracle客户端,有待验证。】

   【由于Domain.xml 在不同环境中配置可能不同,现在把这个文件排除在解决方案之外,发布后手动拷贝可用的版本到目录即可,发布的时候直接覆盖也可不用管这个文件了 】

6、进入系统,多数页面报错,清理源生成目录,把旧版dll文件都删除(web项目中那十几个子项目生成的dll),还有Date控件重复,删除重复的 ,修改相关引用。 这时 所有页面访问正常。

二、发布到测试环境(Jenkins )

1、由于Jenkins中MSBUILD不能设置版本,【可能Jenkins版本的问题,或者是MSBUILD插件安装的问题,看其他人的Jenkins在系统设置处是可以配置多版本MSBUILD的  4.0 、3.5、 2.0 ...】MSBUILD构建的时候 只有一个DEFAULT可选,固必须使用4.0编译发布项目了。

     编译过程中报的几个错以及解决办法:  

     ①

    

         由于本机环境和服务器不同,Oracle.DataAccess.dll 版本可能与服务器环境不兼容,经研究 ,在项目里把 Oracle.DataAccess.dll  的引用 的“特定版本”选项改为False。其实就是修改.csproj文件中的引用

        

         这就是csproj文件中的引用形式   SpecificVersion 属性就是是否使用特定版本


    ②  

        

      后面的一堆问题都比较类似,都是找不到dll ,命名项目里引用了 项目中的dll文件,文件也上传到git   down到 jenkins的工作区目录里,就是找不到dll,

     仔细看MSBUILD的控制台输出就会发现, 查找dll文件根本没有去 找  ..\bin\xxxx.dll  而是去找了一堆系统目录,当然没找到  然后就报错。还是仔细查看csproj文件   也是奇怪了 ,命名引的dll ,就是没有"HintPath" 即提示路径,导致MSBUILD去系统目录瞎找。

     于是 手动都加上HintPath  再生成  成功了。



 接下来就是运行的错了:


   ① 首先  提示无法加载XXXXX.XmlSerializers.dll   共有两个这种文件,其实项目中并没有叫这个名字的项目

  查了下   这两个项目都有引用了WebService ,在项目属性中  有个设置  生成序列化程序集,这个选择自动或者开 就是生成这个dll文件,生成这个文件的作用是加快WebService对象序列化的速度。

开始想把这个设置成关闭,后来感觉这样做会对性能有影响而且可能引起其他无法预测的影响,便换了个思路把应用程序池换成了4.0版本。于是接下来的错误便产生了


②  配置错误定义了重复的配置节


原因是4.0下  也会从系统配置文件中读取配置,而系统配置文件中有这些配置节  导致重复,所以  把重复的配置节注释掉即可

接下来似乎一切正常了 ,发布 运行,直到打开了报表平台。

③  关于报表平台 。

  这三个引用必须加好,即使程序中不引也不会报错。可能是某些特殊原因,导致发布后bin还是没有这几个dll,于是参考上文,修改csproj文件 ,手动添加 HintPath节点 。

然后是报表模板rdlc文件,把现有系统的模板复制到项目中,包括到项目中,生成 ,发现还是没有,后来发现,所有rdlc文件的生成操作 都是 嵌入的资源,  改成 “内容“  就可以了

接下来  直接报数据库连接错误了,发现报表平台使用的oracle连接  不是Domain.xml 里 的   而是从数据库中读的。由于数据库中存服务名的是相对于服务器的,服务器与本机tnsnames.ora 文件配置不同 当然连接失败。于是从服务器上同步tnsnames.ora  到本机。

数据库连上了 ,报表还是出不来,仔细分析网络请求,发现 好多请求都404了  ,当时忘了截图了 ,现在是修改后的,其中EHR.css  是根本就没有这个文件,但是也没发现那里有异常,回头是否要找供应商要一下。但这不是重点。

重点是下面这些奇怪的请求路径和参数,在发布文件中并没有找到这个Reserved.ReportViewerWebControl.axd文件,后来找来找去发现是在Web.config 中配置的 

发现  这又是一个2.0  和4.0 的差异    : Module及handler的区段是在不同的位置內     2.0<system.web>      4.0<system.webserver>

把Reserved.ReportViewerWebControl.axd   从 system.web  搬到   system.webserver 中  我是复制了一份 ,其实直接剪切应该也可以 ,注意要加上  name 属性

      此时 这些404 就都可以请求到了。

需要注意的:

1、目前Domain.xml的处理方式是 不包含在项目中,不会发布出来,如发布到新目录需手动添加,如覆盖更新则不用管它。

2、引用dll是否 莫名其妙的.csproj文件 不会有 HintPath  配置节, 可能需要手动添加。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值