zoukankan      html  css  js  c++  java
  • 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以向下兼容的目的。

    具体如下图所示

    clipboard

    图1

    image

    图2

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

    image

    图3

    但是类库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文件目录下。

    image

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

  • 相关阅读:
    linux自动挂载
    VUE 封装 api类
    数据库中如何判断某参数为空就不执行where条件
    axios 拦截 , 页面跳转, token 验证(非本人原创)
    springboot 集成 WebSocket (非本人原创)
    spring cloud整合 websocket 的那些事
    前后端消息推送
    spring cloud 之eureka配置
    spring cloud 之demo
    linux 进程的 5 大段
  • 原文地址:https://www.cnblogs.com/flowwind/p/4204446.html
Copyright © 2011-2022 走看看