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

转自:https://www.cnblogs.com/KevinYang/archive/2011/04/10/2011879.html

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

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

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

Visual studio Configuration manager

如果添加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即可。

希望此文对你有帮助。

这就很神奇了,我理解是1.VS在处理命名空间的时候将 $(Configuration)\ 解释成了字符串,作为文件夹名字 2.VS在编译的时候,又将$(Configuration)\ 作为宏来处理,解释为Debug 或者 Release 3.我觉得更大的可能性是处理命名空间和编译的使用使用的都是$(Configuration)\这个文件夹下面的dll,哪位有心可以做个实验:不提供Debug release目录,看是否可以编译。如果不可以的话,再将$(Configuration)\ 改为一个文件夹名字,这样提供三个文件夹,应该也可以工作的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】DICOM之Print!!!!!!!!!

转自&#xff1a;https://blog.csdn.net/weixin_41556165/article/details/81064531 基本概念&#xff1a; Film:在DICOM协议中使用Film来统称不同的Hard Copy&#xff0c;例如photographic film和paper。 DICOM Print的数据流由Print Session、Print Job、Print&#xff08;h…

静态html js文件上传,js实现动态添加上传文件页面

发邮件是需要添加一些文件&#xff0c;每添加一个文件&#xff0c;页面上可以显示一个表单文件上传选项。此功能为&#xff1a;初始时刻只有一个添加按钮&#xff0c;当点击添加文件时&#xff0c;会增加一个选择文件和删除区域&#xff0c;同时显示上传按钮&#xff0c;当点击…

WINCE6.0文件系统及存储管理器

*******************************LoongEmbedded******************************** 作者&#xff1a;LoongEmbedded 时间&#xff1a;2010.12.03 类别&#xff1a;WINCE嵌入式系统 ********************************LoongEmbedded******************************** Filesys.…

【转】Wireshark网络抓包(一)——数据包、着色规则和提示

转自&#xff1a;https://www.cnblogs.com/strick/p/6261463.html 一、数据包详细信息 Packet Details面板内容如下&#xff0c;主要用于分析封包的详细信息。 帧&#xff1a;物理层、链路层 包&#xff1a;网络层 段&#xff1a;传输层、应用层 1&#xff09;Frame 物理层…

【转】Wireshark网络抓包(二)——过滤器

转自&#xff1a;https://www.cnblogs.com/strick/p/6261915.html 一、捕获过滤器 选中捕获选项后&#xff0c;就会弹出下面这个框&#xff0c;在红色输入框中就可以编写过滤规则。 1&#xff09;捕获单个IP地址 2&#xff09;捕获IP地址范围 3&#xff09;捕获广播或多播地址…

html访问虚拟目录路径,IIS7.5虚拟目录物理路径指向共享文件夹详解

本文重点描述如何使用IIS访问共享资源来架设站点或执行 ASP.Net 等脚本。UNC是 Universal Naming Convention 的简称&#xff0c;也叫通用命名规范、通用命名约定。网络(范指局域网)上资源的完整位置名称。通常情况下&#xff0c;拥有多台服务器的朋友在使用IIS建立站点的时候&…

【转】DICOM:DICOM三大开源库对比分析之“数据加载”

背景&#xff1a; 上一篇博文DICOM&#xff1a;DICOM万能编辑工具之Sante DICOM Editor介绍了DICOM万能编辑工具&#xff0c;在日常使用过程中发现&#xff0c;“只要Sante DICOM Editor打不开的数据&#xff0c;基本可以判定此DICOM文件格式错误&#xff08;准确率达99.9999%…

html中点击照片时放大缩小,基于jquery实现一张图片点击鼠标放大再点缩小

. 代码如下:var isopen false;var newImg;var w 200; //将图片宽度200var h 200; // 将图片高度 200$(document).ready(function(){$("img").bind("click", function(){newImg this;if (!isopen){isopen true;$(this).width($(this).width() w);$(th…

css入门之head区设置

收藏夹小图标 如果你将本站加入收藏夹&#xff0c;可以看到在收藏夹网址之前的IE图标变成了本站特别的图标。要实现这样效果很简单&#xff0c;首先制作一个16x16的icon图标&#xff0c;命名为favicon.ico&#xff0c;放在根目录下。然后将下面的代码嵌入head区&#xff1a; &l…

04751计算机网络安全讲解,【19份】04751计算机网络安全自考试卷_历年真题自考答案及解析_湖南080901计算机科学与技术(原B080702计算机及应用)专业-自考生资料网...

1、资料如何使用本商城提供资料为WORD版&#xff0c;可打印成纸质版&#xff0c;结合备考习惯&#xff0c;营造考试氛围。支持手机查看&#xff0c;随时随地&#xff0c;高效学习。WORD文档也可直接用于电脑端学习&#xff0c;快速浏览&#xff0c;永久使用。2、文档无法编辑&a…

【转】Wireshark网络抓包(三)——网络协议

转自&#xff1a;https://www.cnblogs.com/strick/p/6262284.html 一、ARP协议 ARP&#xff08;Address Resolution Protocol&#xff09;地址解析协议&#xff0c;将IP地址解析成MAC地址。 IP地址在OSI模型第三层&#xff0c;MAC地址在OSI第二层&#xff0c;彼此不直接通信…

【转】Wireshark网络抓包(四)——工具

转自&#xff1a;https://www.cnblogs.com/strick/p/6344486.html 一、基本信息统计工具 1&#xff09;捕获文件属性&#xff08;Summary&#xff09; 1. File&#xff1a;了解抓包文件的各种属性&#xff0c;例如抓包文件的名称、路径、文件所含数据包的规模等信息 2. Tim…

silverlight + wcf(json格式) + sqlserver存储过程分页

silverlight并没有提供现成的分页控件&#xff0c;百度了一圈&#xff0c;也没有发现aspx中好用的类似AspNetPager成熟控件&#xff0c;网上现有的一些分页代码&#xff0c;很多也是基于1.0版本的&#xff0c;silverlight2.0的并不多&#xff0c;自个儿琢磨了一下&#xff0c;发…

什么是指利用计算机和现代,现代计算机一般指什么计算机?

现代计算机一般指通用数字电子计算机&#xff0c;它是当今世界电子计算机行业中的主流&#xff0c;其内部处理的是一种称为符号信号或数字信号的电信号&#xff1b;它的主要特点是“离散”&#xff0c;在相邻的两个符号之间不可能有第三种符号存在。电子计算机分为模拟式电子计…

【转】VS中常用图标提示含义

转自&#xff1a;https://www.cnblogs.com/zhjason/articles/14044190.html 有增删 “类视图”和“对象浏览器”图标 “类视图”和“对象浏览器”显示表示代码实体的图标&#xff0c;如命名空间、类、函数和变量 。 下表展示和描述了图标。 图标描述图标描述图标描述图标描述…

二层和三层转发

二层转发的机制是什么?学习线程和报文转发线程。二层只跟MAC地址有关 与IP无关 所以在二层做IP&#xff0d;MAC绑定是无效的。 三层以太网交换机的转发机制主要分为两个部分&#xff1a; 二层转发和三层交换。      先讲二层转发流程。      1、 MAC地址介绍   MA…

【转】胶片曝光时的排版!!!!!!!

这个本来没啥 不是什么算法 绝技。 都不值得一提。 其实这个是医学影像胶片曝光时排版的一个逻辑。 dicom标准第三部分 主要是讲IOD定义 在第166页有这样的描述&#xff1a; 表C.13.5-1图象盒象素描述组件 属性名称 标记       说明 图象位置 (2020,0010)  …

计算机课数学,这4个专业,对数学要求很高,数学不好的慎选!

建筑学专业这个专业就是典型数学课程比较多的专业&#xff0c;如果数学成绩不好&#xff0c;真心建议千万不要选择这个专业&#xff0c;因为学习的课程与大多与数学有关&#xff0c;而且难度较大。像代数&#xff0c;微积分&#xff0c;线性规划&#xff0c;统计学等课程都是在…

架构师之路(5)---IoC框架

1 IoC理论的背景 我们都知道在面向对象的应用中&#xff0c;软件系统都是由N个对象组成的&#xff0c;它们通过彼此的合作&#xff0c;最终实现业务逻辑。 图1&#xff1a;耦合在一起的对象 如果我们打开机械式手表的后盖&#xff0c;就会看到与上面类似的情形&#xff0c;各…

【转】数据库软考笔记(一)第一章 计算机硬件基础知识笔记总结

转自&#xff1a;https://blog.csdn.net/qq_36411874/article/details/115057569 目录 运算器&#xff1a;ALU、AC、DR、PSW 控制器&#xff1a;IR、PC、AR、ID 寄存器组&#xff08;了解即可&#xff09; 存储器 存储器与总线&#xff08;了解&#xff0c;考分类&#xf…