【转】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,一经查实,立即删除!

相关文章

asp 生成html文件,将指定的asp文件内容生成html文件_asp技巧

Function GetPage(url)dim RetrievalSet Retrieval CreateObject(“Microsoft.XMLHTTP”)With Retrieval.Open “Get”, url, False , “”, “”.SendGetPage BytesToBstr(.ResponseBody)End WithSet Retrieval NothingEnd FunctionFunction BytesToBstr(body)dim objstrea…

Delphi手动创建数据集

习惯了.net的DataTable&#xff0c;便习惯性的认为Delphi中也有类似的东西&#xff0c;结果搞了好久才搞定&#xff0c;看来看去是拿着Delphi实现.net的思想&#xff0c;生搬硬套了&#xff0c;不过倒也解决了一些问题语言间的思想差别还是有的呃。 1数据集的创建CreatDataSet…

WINCE基于hive注册表的实现

1.WINCE注册表概述 WINCE注册表保存着应用程序、驱动、用户参数配置和其他配置设定的数据&#xff0c;WINCE提供自由选择基于RAM还是基于hive的注册表&#xff0c;其中基于RAM注册表本质是堆栈文件&#xff0c;保存在RAM中&#xff0c;如果RAM的供电掉电了&#xff0c;除非OEM…

【转】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;当点击…

JS截取字符串

使用 substring()或者slice() 函数&#xff1a;split() 功能&#xff1a;使用一个指定的分隔符把一个字符串分割存储到数组例子&#xff1a;str”jpg|bmp|gif|ico|png”;arrtheString.split(”|”);//arr是一个包含字符值”jpg”、”bmp”、”gif”、”ico”和”png”的数组 函…

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 物理层…

昆明第八中学2021高考成绩查询,昆明市第八中学2021年招生录取分数线

同学们选择学校的时候肯定会先了解学校的招生分数&#xff0c;如果最新的招生分数还没有公布&#xff0c;可以参考以前的招生分数信息。具体为同学们分享下昆明市第八中学招生录取分数线的信息。学生想要选择到一流的学校就要有百分百的努力才行&#xff0c;因为好的学校要求也…

解决问题:HTTP 错误 401.1 - 未授权:登录失败【转】

解决问题&#xff1a;HTTP 错误 401.1 - 未授权&#xff1a;登录失败HTTP 错误 401.1 - 未授权&#xff1a;登录失败 Internet 信息服务 -----------解决这个问题&#xff0c;折磨了两天&#xff0c;终于搞定了&#xff0c;首先我按照其他仁兄的提示做了一遍&#xff1a;【解决…

【转】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建立站点的时候&…

XML文档的基本操作

已知有一个XML文档&#xff08;bookstore.xml&#xff09;如下&#xff1a; <?xml version"1.0" encoding"gb2312"?> <bookstore> <book genre"fantasy" ISBN"2-3631-4"> <title>Oberons Legacy</title&…

delphi 发送html邮件,delphi发送html带附件邮件

varhtml: TIdText;beginif not SMTP.Connected thenSMTP.Disconnect();trySMTP.Connect;tryif SMTP.Authenticate then //验证beginEMessage.Recipients.EMailAddresses : FUser;EMessage.ClearBody;//清空正文html: TIdText.Create(EMessage.MessageParts);EMessage.Subject:N…

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

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

wince Hive注册表实现机制

WinCE下的注册表可以分为两种&#xff0c;一种是RAM based&#xff0c;另外一种是HIVE based了.这要根据你在PB里添加的是哪种配置. 用PB向导新建的WinCE工程文件默认会用RAM based. Hive 注册表可以实现掉电不丢失数据.那它是如何实现这种机制的呢. RAM based 注册表因为是把信…

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…

初识WINCE的HIVE注册表

要点&#xff1a;1、WINCE5.0的注册表共分为两类&#xff0d;&#xff0d;RAM based及HIVE based&#xff1b;2、RAM based注册表特点是在内核启动时&#xff0c;被释放到内存&#xff0c;用户可以修改&#xff0c;但由于是基于内存的方式&#xff0c;所以在系统掉电后&#xf…

【转】Dicom基础知识

DICOM 文件可以大致分为两部分&#xff1a; 一部分&#xff1a;与 图像 相关 的 元 信息 &#xff0c;包括患者信息&#xff0c;检查信息&#xff0c;序列信息&#xff0c;图像信息等等。 另一部分&#xff1a;图像的像素数据。 在解析DICOM文件中的像素数据的时候&#xff0c;…