昨天,公司网站发布新版本,结果发现一个严重问题,其中一个类库没有自动更新,而是自动生成了一个过期版本。
) P5 a1 W( k& _3 O3 S$ o0 [& V4 {* F: V/ m/ C1 }, C3 O, a
经过排查发现,原来和VSS中的一个dll.refresh文件有关。3 ^% I: J! q2 B F3 M+ H/ e/ m
* H }. P: u) F) F$ @! L
原因很简单: e1 ~8 M S. ^
/ R$ s! ?0 |9 `1 Q7 W W
1。开发过程中,引用项目时,系统自动生成了该refresh文件,具体原因不明,似乎有时候项目引用不会生成此文件% @$ e& Y5 s7 ^4 @, P8 E
; Z R# d. N, @5 W- N
2。该refresh文件指定了自动更新dll的路径,如果是类库引用,其中会指定Dubug或者Release目录,这次出错的文件就是指定Debug目录
1 c! H' c6 O& M4 C
8 T0 p2 ^# E) R3 [$ F" Z3。开发人员误将该文件签入VSS代码库0 s1 r' Z: s0 b3 X" T, v
0 ?1 U6 `- y- |
4。问题来了,该引用类库在第一期版本发布后多次变动,但接口无变化,所以都是单独生成该类库,然后只更新所有应用的对应DLL(Release版本),一直没有问题,但是,当某应用重新发布时,由于该项目BIN目录中refresh文件的存在,导致自动以该文件指定路径更新DLL,就导致了旧版本DLL(Debug版本)的发布* t0 T* _5 F6 E
, r8 c: l5 W) X; J5 M2 Z8 F
问题解决:
. [, b5 V+ M2 Q4 @3 w/ w ]% O. I
3 s' A5 a( k: I# ]删除应用中dll.refresh文件,重新发布应用即可
. \, k9 X* M# h. A. b
8 Z8 h* c7 f% m) ~遗留问题:
7 h% L- i7 b8 {! w
$ u0 g- S* z* s7 T# `$ ~dll.refresh文件是否生成的条件不明,排查中发现,同一个应用中引用多个类库,不是所有的引用都生成该文件,同样,同一个类库在多个应用中的引用,也不是都生成该文件。
) s1 X; `* d, R/ r. q. X+ Q9 [: g. ~% N- q2 y) L$ `
|