昨天,公司网站发布新版本,结果发现一个严重问题,其中一个类库没有自动更新,而是自动生成了一个过期版本。+ y! I: N' _# @0 B7 z/ l
5 ?) R' y$ w8 P/ n经过排查发现,原来和VSS中的一个dll.refresh文件有关。7 O% e" @6 V; c( o
: |$ g5 k. P& K" q/ r# H原因很简单:% K/ W" ~; E. e) F1 f
! D2 ?8 E& l& Q4 X# K% }
1。开发过程中,引用项目时,系统自动生成了该refresh文件,具体原因不明,似乎有时候项目引用不会生成此文件* B8 w0 A) D$ [4 k4 z3 j; |( q
' P8 S4 F) F" F2 ?; a% m8 v
2。该refresh文件指定了自动更新dll的路径,如果是类库引用,其中会指定Dubug或者Release目录,这次出错的文件就是指定Debug目录/ o a2 q! q7 o& E, i
4 D4 o( y2 X) q7 z3 ]
3。开发人员误将该文件签入VSS代码库/ e# j( J& L, W- D9 K5 _/ q
$ V+ L7 {5 @2 M# K3 q# U4。问题来了,该引用类库在第一期版本发布后多次变动,但接口无变化,所以都是单独生成该类库,然后只更新所有应用的对应DLL(Release版本),一直没有问题,但是,当某应用重新发布时,由于该项目BIN目录中refresh文件的存在,导致自动以该文件指定路径更新DLL,就导致了旧版本DLL(Debug版本)的发布 c, Q5 R5 e# }
, Z' ~" H& K9 m. k/ o
问题解决:
; ]! X+ b4 C9 [5 E% v- i: o# i) J% R m' a3 b, K( w
删除应用中dll.refresh文件,重新发布应用即可
" ^- {/ t! v* y, C
: N$ S& n$ F0 h遗留问题:$ t4 M+ q7 z, F, Y: n
, | m. \8 T* P8 |0 G+ a. C* }4 Ldll.refresh文件是否生成的条件不明,排查中发现,同一个应用中引用多个类库,不是所有的引用都生成该文件,同样,同一个类库在多个应用中的引用,也不是都生成该文件。; t/ K8 z- |, Y( r" h: H, |
- b+ Y5 a: s* T9 n
|