架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 101|回复: 2

[资料] 引用项目类库时dll.refresh文件的影响

[复制链接]
发表于 2020-5-4 20:42:50 | 显示全部楼层
众所周知,.net的程序生成后会在bin目录下生成.dll文件,而.dll.refresh这个文件从何而来呢?那天无聊地google了下才知, 这个东东是在你的项目中引用第三方程序集(是直接的)时自动生成的,这个.refresh文件存储了那个第三方文件的原始文件路径,如果该路径下的这个 dll更新了,vs在生成本项目时,就会根据这个地址更新改程序集。如果没有这个文件,vs就无法根据最新状态更新引用的程序集了,所以会造成程序集版本 不对的问题。一个小细节将会导致大问题,大家注意呦!

网站发布新版本,结果发现一个严重问题,其中一个类库没有自动更新,而是自动生成了一个过期版本。

经过排查发现,原来和VSS中的一个dll.refresh文件有关。

原因很简单:

1。开发过程中,网站添加其他外部dll引用时,系统自动生成了该refresh文件,如果是添加本解决方案下其他项目dll引用不会生成此文件

2。该refresh文件指定了自动更新dll的路径,如果是类库引用,其中会指定Dubug或者Release目录,这次出错的文件就是指定Debug目录

3。开发人员误将该文件签入VSS代码库

4。问题来了,该引用类库在第一期版本发布后多次变动,但接口无变化,所以都是单独生成该类库,然后只更新所有应用的对应DLL(Release版本),一直没有问题,但是,当某应用重新发布时,由于该项目BIN目录中refresh文件的存在,导致自动以该文件指定路径更新DLL,就导致了旧版本 DLL(Debug版本)的发布

问题解决:

删除应用中dll.refresh文件,重新发布应用即可

或者 把dll.refresh里面的内容修改一下 ,dll路径写正确既可





上一篇:数据库架构:读写分离到CQRS
下一篇:npm 设置和取消代理的方法
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2020-5-4 20:44:32 | 显示全部楼层
在vs2005引用一个外部dll文件就是产生一个扩展名为.refresh,
如引用一个System.Web.Extensions.dll,它就自动产生一个名为System.Web.Extensions.dll.refresh,里面的内容是这个Dll的绝对路径.
注意:删掉之后,你通过文件路径引用的dll,VS2005将不会帮你自动更新到bin目录里。也就是说如果你引用的dll更新了,你必须自己手动重新引用一次。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2020-5-17 11:51:33 | 显示全部楼层
test
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2020-5-28 15:05

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表