公司一些早期的项目,把所有工程都放到一个解决方案下了,导致整个解决方案编译很慢,而且也不便于类库的复用和维护。因此我们决定把工程按照功能划 分到不同的解决方案里头,然后定期发布dll到TFS配置库上固定的TeamProject下面,以后应用程序引用时就不添加工程,而是采用添加dll的 方式。但是现在遇到一个问题,发布dll一般会发布Debug和Release两个版本,那么应用程序应该引用哪个版本呢?

理想情况下,开发测试的时候应该使用Debug版本,这样抛异常的时候调试很方便。正式部署到生产环境的时候可以使用Release版本,这样性能好一些。但是添加dll的时候VS只允许选择一个版本。

我们知道,VS支持把工程不同的编译选项保存到不同的配置中,编译时根据当前使用的配置来决定采用什么样的编译选项。默认会新建Debug和Release这两个配置。开发时我们一般选Debug配置,发布时一般选择Release。

如果添加dll时也能根据当前配置引用不同路径的dll,那就好了。在stackoverflow上搜到了相关的信息,说可以修改csproj工程文件,使用VS宏变量来指定dll路径。用记事本打开研究了一番倒也挺简单的.找到引用类库的地方:

<ItemGroup>
  <Reference Include="ClassLibrary1,Version=1.0.0.0,Culture=neutral,processorArchitecture=MSIL">
    <SpecificVersion>False</SpecificVersion>
    <HintPath>Lib\Debug\ClassLibrary1.dll</HintPath>
  </Reference>

只需要改成:

<ItemGroup>
    <Reference Include="ClassLibrary1, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>Lib\$(Configuration)\ClassLibrary1.dll</HintPath>
    </Reference>

这样编译时VS就能根据当前配置到Debug或者Release文件夹下寻找相应的dll了。

不过这样一来,以后添加dll的时候就有点麻烦了,每次都要手工编辑csproj文件。同事吴突发奇想,能不能在发布的时候再建一个名为“$(Configuration)”的文件夹,以后直接引用这个文件夹下的dll即可,都不需要修改csproj文件了。我的第一个反应是VS应该会对这样的路径做转义之类的,因为和内置变量名冲突了。但本着“不确定的事情要通过实验去验证”的精神,我做了这个实验,发现居然可以!VS才不管你路径包含什么字符串呢。

最后的结论,发布dll时,需要同时发布到以下三个文件夹:

  • $(Configuration)\MyLibrary.dll
  • Debug\MyLibrary.dll
  • Release\MyLibrary.dll

其中$(Configuration)文件夹下的dll无所谓哪个版本了,这个纯粹只是为了骗过Visual Studio的而已,编译时根本不会用到。添加dll引用的时候,直接引用$(Configuration)\MyLibrary.dll即可。

转载于:https://www.cnblogs.com/shihao/archive/2011/11/01/2231377.html

VS编译时自动引用Debug|Release版本的dll相关推荐

  1. 【转】VS编译时自动引用Debug|Release版本的dll

    转自:https://www.cnblogs.com/KevinYang/archive/2011/04/10/2011879.html 公司一些早期的项目,把所有工程都放到一个解决方案下了,导致整个 ...

  2. C++动态库*.dll文件的Debug/Release版本是否可以混用(交叉用)?

    1.现象: 使用一些第三方的dll,比如opencv,会分别生成debug和release的dll,在exe中必须要引用指定版本的dll,不能混用,否则会出错:同样的道理,jsoncpp库也是. 但是 ...

  3. 如何让程序集在每次编译时自动产生不同的版本号

    有的时候我们可能不光需要知道程序集的编译版本,还可能需要 知道关于编译的更详细的信息,比如大概编译的时间等. 那么怎么做呢,难道需要每次编译时都要改版本号吗, .net提供了一个简单的方法,把版本号如 ...

  4. Android开发之Android studio自动签名打包release 版本的正确姿势(完整版) | 文末尾附有Google官方签名教程

    1.从以下方面讲解打包正式版本分为: 自动打包(也就是每次项目跑起来就是release正式版本)apk 手动打包:就是每次需要重新签名后选择release正式版本再跑起来生成apk 先说手动版本特别简 ...

  5. iOS架构-静态库.a编译时自动导出.h头文件(24)

    在使用Xcode成功编译一个静态库时,在对应的输出目录下有一个include目录,但是其中没有相关的.h头文件.由于.h文件和 .cpp文件是在同一个目录下,再加上文件数量较多,如果手动的将.h文件导 ...

  6. VC中debug和release版本的区别

    vc中debug和release的不同 收藏  在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现:release与debug运行结果不一致,甚至出错,而release又不方便调试,真的是当 ...

  7. android自动填充包名,debug/release 修改包名,取不同包名下的agconnect-services.json 文件...

    问题描述 我在打多渠道包的时候,我需要区分debug版本,release版本,其中涉及到包名的不同,我使用release编译的时候,发现如下错误信息.这个原因是因为你的agconnect-servic ...

  8. 蠢哭了,debug版本可用release版本出错

    记录一下本人遇到的问题,可能不适用于各位. win10 vs2015  MFC编写的一个动态库dll工程,debug版本release版本编译都通过.但是运行时debug版本可用 release版本出 ...

  9. Eclipse使用gradle编译时,使用固定的jdk版本进行编译(修改gradle的jdk编译版本)

    很多时候我们使用多个版本的jdk,比如说,用的是1.7 ,开发环境用1.8 那么经常碰到编译后的包是1.8版本的,虽然设置了1.7的,因为很多时候我们使用打包工具了. 1.7和1.8有个问题就是1.8 ...

  10. gradle 指定java版本_Eclipse使用gradle编译时,使用固定的jdk版本进行编译(修改gradle的jdk编译版本)...

    很多时候我们使用多个版本的jdk,比如说,用的是1.7 ,开发环境用1.8 那么经常碰到编译后的包是1.8版本的,虽然设置了1.7的,因为很多时候我们使用打包工具了. 1.7和1.8有个问题就是1.8 ...

最新文章

  1. Spring Cloud Alibaba 综合应用:Seata 分布式事务实战教程
  2. springBoot 搭建web项目(前后端分离,附项目源代码地址)
  3. ACL2020 | 使用强化学习为机器翻译生成对抗样本
  4. win7怎么桌面能不能设置html,win7系统怎么格式化
  5. MySQL5.5.32编译安装
  6. javascript基本功
  7. 通过wifi调试Android程序
  8. 硬币等于骰子(在统计学意义上)
  9. pycharm的下载,安装及首次启动
  10. Eclipse Code Template 设置自动加注释
  11. Atitit 健康减肥与软件健康减肥的总结 attilax著 1. 几大最佳实践减肥行为 1 1.1. 控制饮食分量用小碗 小盘子 小餐具 1 1.2. 软件如何减肥,控制资源占有率,比如体积 打包
  12. ceph mds启动流程
  13. 产品经理如何写产品白皮书
  14. 网站故障和安全事件的应急预案
  15. org.openjdk.jol
  16. 服务创新产品“在线智能问诊”——互联网平台建设...
  17. S0-S5,G0-G3(附Intel图)
  18. 个人微信公众号:AIquantLab,关注回复得1000GB学习资料~~
  19. 【unity 笔记】ugui艺术字体
  20. 在Linux上使用netstat命令查证DDOS攻击的方法

热门文章

  1. liunx中常用命令 -大数据
  2. android 属性翻牌动画,如何在Android中利用TextSwitcher实现一个文字上下翻牌效果
  3. java 泛洪攻击_网易有道后端实习面经
  4. Servlet chapter 3
  5. linux Flatpak 安装包,snap卸载
  6. Linux 命令之 scp 文件传输
  7. Spring mvc mybatis cxf Add CGLIB to your classpath. 错误
  8. shell初级-----更多结构化命令
  9. python编程系列---global的使用注意点
  10. 【TP】TP如何向模板中的js传变量