vs的dll引用机制

vs2012编译的时候,遇到一个问题就是项目A中运行时缺失dll的问题,项目A引用类库B,类库B引用了x,y等dll,编译A项目的时候,出现x没拷贝到bin 目录。工具

经过跟踪编译输出发现,x没拷贝的缘由是y这个dll也引用了x,并且y引用的x版本高于当前B引用的。这样在编译的时候,就会出现提示x版本1.0.0.0与x版本0.9.3.0出现冲突,选择x版本1.0.0.0 由于此版本更高(图1),而后开始遍历相关路径(图2)去寻找该1.0.0.0版本的dll,这个编译机制应该是vs出于引用高版本dll以向下兼容的目的。blog

具体以下图所示ip

clipboard

图1get

image

图2it

查看编译输出的方法 打开vs的工具--选项 选择诊断或者详细,能捕捉到编译时更多的操做动做,具体以下图3编译

image

图3cli

可是类库B也引用了x和y,b编译时却能够在bin文件获得x的输出,若是是依照上面的编译机制,x也是不能编译输出的,这里vs采用了以下机制,即类库B引用的x版本0.9.0.0虽然低于y引用的x 1.0.0.0,但在这里x是直接引用在类库B里,那这样x 0.9.0.0即为主版本,那这时会将该0.9.0.0版本的x编译到类库B的bin文件目录下。List

image

在项目obj/bin文件目录下 会有”项目名.csproj.FileListAbsolute.txt”的文件,里面是编译时输出到bin文件目录下的dll列表。遍历

相关文章
相关标签/搜索