昨天,公司网站发布新版本,结果发现一个严重问题,其中一个类库没有自动更新,而是自动生成了一个过期版本。1 \" Q' R: T+ C8 w# n% ]# f
$ O, g6 C- V& O
经过排查发现,原来和VSS中的一个dll.refresh文件有关。
* V9 ]$ Q4 I* Y' Y
! t( a1 E# J7 F( j原因很简单:
0 U" g8 _# w7 R1 A, w! J4 U, `& ~* y6 {
1。开发过程中,引用项目时,系统自动生成了该refresh文件,具体原因不明,似乎有时候项目引用不会生成此文件
K+ Y$ \$ u9 ~( Y$ e
+ P2 Q i, A. `$ M" w7 _1 h2。该refresh文件指定了自动更新dll的路径,如果是类库引用,其中会指定Dubug或者Release目录,这次出错的文件就是指定Debug目录) I3 S; v7 L8 E* f% N5 K( d. E
# g4 M: G8 H' K3。开发人员误将该文件签入VSS代码库
4 e* `% i5 _2 v& g% A
6 P% o& V. H+ Q% [3 v5 g* o4。问题来了,该引用类库在第一期版本发布后多次变动,但接口无变化,所以都是单独生成该类库,然后只更新所有应用的对应DLL(Release版本),一直没有问题,但是,当某应用重新发布时,由于该项目BIN目录中refresh文件的存在,导致自动以该文件指定路径更新DLL,就导致了旧版本DLL(Debug版本)的发布
* v; w* U/ @& D9 a9 J% n/ d+ B8 g( U
问题解决:
; i5 S: N, ^% k w( e
- ~. \7 R5 v3 y4 G, F. g删除应用中dll.refresh文件,重新发布应用即可
! z9 B" N8 ]) J7 X" @" o) x* q P. G* M" W/ d, E" Z* K- m6 _
遗留问题:9 S' R6 H0 n- D d
6 R/ T5 e) J1 A2 H1 I1 ~
dll.refresh文件是否生成的条件不明,排查中发现,同一个应用中引用多个类库,不是所有的引用都生成该文件,同样,同一个类库在多个应用中的引用,也不是都生成该文件。4 ?6 V0 |: y% j
1 G2 ^3 B, f" K
|