昨天,公司网站发布新版本,结果发现一个严重问题,其中一个类库没有自动更新,而是自动生成了一个过期版本。
9 [- F. |6 f1 A, V1 E" J1 K3 ?3 A
经过排查发现,原来和VSS中的一个dll.refresh文件有关。! T5 n4 e, z/ l, |: [
D, t& X: o" w; u* l/ o
原因很简单:5 ^4 H( q$ q: e0 Z
" I% b+ R& R$ F; i4 b1。开发过程中,引用项目时,系统自动生成了该refresh文件,具体原因不明,似乎有时候项目引用不会生成此文件. O. U0 p$ Y$ G7 T4 }
; [: M6 o T; d! n, t: }! T2。该refresh文件指定了自动更新dll的路径,如果是类库引用,其中会指定Dubug或者Release目录,这次出错的文件就是指定Debug目录
% N9 Y$ Z( Z; P& H8 {$ Z& b* `" W' J, C0 t
3。开发人员误将该文件签入VSS代码库
4 W9 U: w# p! L; V2 J8 j0 `) J- ~
4。问题来了,该引用类库在第一期版本发布后多次变动,但接口无变化,所以都是单独生成该类库,然后只更新所有应用的对应DLL(Release版本),一直没有问题,但是,当某应用重新发布时,由于该项目BIN目录中refresh文件的存在,导致自动以该文件指定路径更新DLL,就导致了旧版本DLL(Debug版本)的发布
, ^' v4 V% \" Y# W. O( [7 G$ z( J8 s1 i. j3 z2 z+ l
问题解决:, e' [ y% A3 ^1 d' @
& k: J) T0 h$ p' t# q4 D& f5 G& k删除应用中dll.refresh文件,重新发布应用即可
; c$ W8 o5 ^; t/ b4 T# u* C0 x6 V
遗留问题:
5 c6 J' k7 Q( I% T
& u: g! ]$ e. b! h8 _4 [dll.refresh文件是否生成的条件不明,排查中发现,同一个应用中引用多个类库,不是所有的引用都生成该文件,同样,同一个类库在多个应用中的引用,也不是都生成该文件。
% V$ ]0 D" f& @, K# f* E
% i; v0 q% e. v. R- w+ X6 v* @ |