昨天,公司网站发布新版本,结果发现一个严重问题,其中一个类库没有自动更新,而是自动生成了一个过期版本。& u, e( g, y: r- b8 x9 w q
" d& l e1 r3 g: p4 l经过排查发现,原来和vss中的一个dll.refresh文件有关。
p" w. |' a3 k, i$ u9 `8 f' ]" v4 `& e7 k, |
原因很简单:7 q8 e2 x s* a2 f( ~3 }% u" q
) @6 z* d& d3 `- y2 w* @9 b) y( `7 c1。开发过程中,引用项目时,系统自动生成了该refresh文件,具体原因不明,似乎有时候项目引用不会生成此文件 t* s: n6 k, w7 e, v
5 z8 l" h( q- _" r
2。该refresh文件指定了自动更新dll的路径,如果是类库引用,其中会指定dubug或者release目录,这次出错的文件就是指定debug目录/ g! h( o$ s* o/ m3 h5 s
}' { r% r' `* ?! x- z
3。开发人员误将该文件签入vss代码库- p7 h7 b4 {3 d3 m0 z& a6 _$ _
; u1 q5 p1 ^6 e# x! l" e5 y) x
4。问题来了,该引用类库在第一期版本发布后多次变动,但接口无变化,所以都是单独生成该类库,然后只更新所有应用的对应dll(release版本),一直没有问题,但是,当某应用重新发布时,由于该项目bin目录中refresh文件的存在,导致自动以该文件指定路径更新dll,就导致了旧版本dll(debug版本)的发布$ s3 k: d x0 b _4 s4 z
! o/ }6 f9 e ]2 i( t* g g/ t问题解决:. ]/ y: k) z, s& s7 s- z/ q" r
! w3 n8 ?9 n( \8 j; h! _/ e( \% w
删除应用中dll.refresh文件,重新发布应用即可
5 k, i, t! { f e, e2 {" m# e1 k0 @, d6 `% d/ m
遗留问题:) t: n* ]" d' p% x
- r7 r% ? d1 y1 i( ^/ m; r' ?
dll.refresh文件是否生成的条件不明,排查中发现,同一个应用中引用多个类库,不是所有的引用都生成该文件,同样,同一个类库在多个应用中的引用,也不是都生成该文件。
[) s f9 g7 n3 x4 |* m6 u5 l1 e& }, f/ ^- m* ]5 i& y. t. e
|