VS编译时自动引用Debug|Release版本的dll
公司一些早期的项目,把所有工程都放到一个解决方案下了,导致整个解决方案编译很慢,而且也不便于类库的复用和维护。因此我们决定把工程按照功能划 分到不同的解决方案里头,然后定期发布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相关推荐
- 【转】VS编译时自动引用Debug|Release版本的dll
转自:https://www.cnblogs.com/KevinYang/archive/2011/04/10/2011879.html 公司一些早期的项目,把所有工程都放到一个解决方案下了,导致整个 ...
- C++动态库*.dll文件的Debug/Release版本是否可以混用(交叉用)?
1.现象: 使用一些第三方的dll,比如opencv,会分别生成debug和release的dll,在exe中必须要引用指定版本的dll,不能混用,否则会出错:同样的道理,jsoncpp库也是. 但是 ...
- 如何让程序集在每次编译时自动产生不同的版本号
有的时候我们可能不光需要知道程序集的编译版本,还可能需要 知道关于编译的更详细的信息,比如大概编译的时间等. 那么怎么做呢,难道需要每次编译时都要改版本号吗, .net提供了一个简单的方法,把版本号如 ...
- Android开发之Android studio自动签名打包release 版本的正确姿势(完整版) | 文末尾附有Google官方签名教程
1.从以下方面讲解打包正式版本分为: 自动打包(也就是每次项目跑起来就是release正式版本)apk 手动打包:就是每次需要重新签名后选择release正式版本再跑起来生成apk 先说手动版本特别简 ...
- iOS架构-静态库.a编译时自动导出.h头文件(24)
在使用Xcode成功编译一个静态库时,在对应的输出目录下有一个include目录,但是其中没有相关的.h头文件.由于.h文件和 .cpp文件是在同一个目录下,再加上文件数量较多,如果手动的将.h文件导 ...
- VC中debug和release版本的区别
vc中debug和release的不同 收藏 在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现:release与debug运行结果不一致,甚至出错,而release又不方便调试,真的是当 ...
- android自动填充包名,debug/release 修改包名,取不同包名下的agconnect-services.json 文件...
问题描述 我在打多渠道包的时候,我需要区分debug版本,release版本,其中涉及到包名的不同,我使用release编译的时候,发现如下错误信息.这个原因是因为你的agconnect-servic ...
- 蠢哭了,debug版本可用release版本出错
记录一下本人遇到的问题,可能不适用于各位. win10 vs2015 MFC编写的一个动态库dll工程,debug版本release版本编译都通过.但是运行时debug版本可用 release版本出 ...
- Eclipse使用gradle编译时,使用固定的jdk版本进行编译(修改gradle的jdk编译版本)
很多时候我们使用多个版本的jdk,比如说,用的是1.7 ,开发环境用1.8 那么经常碰到编译后的包是1.8版本的,虽然设置了1.7的,因为很多时候我们使用打包工具了. 1.7和1.8有个问题就是1.8 ...
- gradle 指定java版本_Eclipse使用gradle编译时,使用固定的jdk版本进行编译(修改gradle的jdk编译版本)...
很多时候我们使用多个版本的jdk,比如说,用的是1.7 ,开发环境用1.8 那么经常碰到编译后的包是1.8版本的,虽然设置了1.7的,因为很多时候我们使用打包工具了. 1.7和1.8有个问题就是1.8 ...
最新文章
- Spring Cloud Alibaba 综合应用:Seata 分布式事务实战教程
- springBoot 搭建web项目(前后端分离,附项目源代码地址)
- ACL2020 | 使用强化学习为机器翻译生成对抗样本
- win7怎么桌面能不能设置html,win7系统怎么格式化
- MySQL5.5.32编译安装
- javascript基本功
- 通过wifi调试Android程序
- 硬币等于骰子(在统计学意义上)
- pycharm的下载,安装及首次启动
- Eclipse Code Template 设置自动加注释
- Atitit 健康减肥与软件健康减肥的总结 attilax著 1. 几大最佳实践减肥行为	1 1.1. 控制饮食分量用小碗 小盘子 小餐具	1 1.2. 软件如何减肥,控制资源占有率,比如体积 打包
- ceph mds启动流程
- 产品经理如何写产品白皮书
- 网站故障和安全事件的应急预案
- org.openjdk.jol
- 服务创新产品“在线智能问诊”——互联网平台建设...
- S0-S5,G0-G3(附Intel图)
- 个人微信公众号:AIquantLab,关注回复得1000GB学习资料~~
- 【unity 笔记】ugui艺术字体
- 在Linux上使用netstat命令查证DDOS攻击的方法