昨天,公司网站发布新版本,结果发现一个严重问题,其中一个类库没有自动更新,而是自动生成了一个过期版本。
* z( {8 D+ z# y# u
* i4 E" m- H4 a( O经过排查发现,原来和VSS中的一个dll.refresh文件有关。6 x+ j0 ~, U7 f5 W3 H3 p! ^- }1 ?
. V6 P) G7 r! F原因很简单:
+ [. d5 Z0 V' e z7 e y2 t1 [7 \8 x/ V. p3 G
1。开发过程中,引用项目时,系统自动生成了该refresh文件,具体原因不明,似乎有时候项目引用不会生成此文件2 [' @8 e6 C: r7 z8 x. a1 \# P
" s1 z6 L# ~9 k! c2。该refresh文件指定了自动更新dll的路径,如果是类库引用,其中会指定Dubug或者Release目录,这次出错的文件就是指定Debug目录
) \& P# o( Q& M1 H0 m: D! ^: S& D; {" Z, ^1 A
3。开发人员误将该文件签入VSS代码库+ }9 ~6 h* M% g1 d) R. ~
1 z7 G2 J5 \, ]3 _: U" X: [4。问题来了,该引用类库在第一期版本发布后多次变动,但接口无变化,所以都是单独生成该类库,然后只更新所有应用的对应DLL(Release版本),一直没有问题,但是,当某应用重新发布时,由于该项目BIN目录中refresh文件的存在,导致自动以该文件指定路径更新DLL,就导致了旧版本DLL(Debug版本)的发布2 ?/ X* M; U# f) C+ v* z
8 T2 N' f; w& ?; A& N& Q+ \问题解决:
! J8 }* [+ m! b0 m( X, N) j# e% D% z" f S
删除应用中dll.refresh文件,重新发布应用即可( G, Z5 @7 E7 ?0 s/ Q
) M& B8 x4 G8 w# `# p遗留问题:
! D; Z- x4 `- b, l# \: b* g' F* U* }, _& g8 g! P* C p% B
dll.refresh文件是否生成的条件不明,排查中发现,同一个应用中引用多个类库,不是所有的引用都生成该文件,同样,同一个类库在多个应用中的引用,也不是都生成该文件。# w% T$ F }- o/ z3 L7 F! I
9 I8 q; E- B9 \3 J: D: I |