一次陈旧项目的升级发布之路
2017-08-10 16:34
204 查看
一、本机环境 (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 配置节, 可能需要手动添加。
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 配置节, 可能需要手动添加。
相关文章推荐
- Python学习之路和我发布过的Python脚本博文前端项目
- 记一次项目升级经历
- 项目发布准备(freesbsd上postgres升级等一些准备)
- 打怪升级之路——浅谈公司项目架构
- 一次软件项目升级实施感悟
- maven工程在发布之后如何升级项目版本
- 集团信息化之路 记一次申报信息化项目的历程
- 集团信息化之路 记一次申报信息化项目的历程
- 发布mvc3的项目时system.web.mvc 版本 为3.0.0.1高于服务器版本3.0.0.0 升级到3.0.0.1
- TouchFlo的一次重要升级:TouchFlo 3D, HTC 发布与3G版iPhone抗衡的Diamond手机。
- 新闻发布项目——数据实现类(newsTbDaoImpl)
- maven项目发布到tomcat以及导包需要注意的几个小问题。
- 新发布了一个sourceforge项目(jdbcsharp)
- 记一次ASP.NET MVC4 升级到MVC5的小问题解决
- Win10下IIS配置图解、MVC项目发布图解、IIS添加网站图解
- 在linux上发布更新的项目
- IIS6+resin3整合项目发布,支持多站点配置
- Eclipse下安装SVN插件以及连接SVN服务并发布项目
- vue项目构建-打包-发布--简易demo
- 正式发布.net项目开发工具(V2.0)