惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
Cyberwarzone
Cyberwarzone
L
LINUX DO - 最新话题
N
News and Events Feed by Topic
T
Troy Hunt's Blog
Help Net Security
Help Net Security
S
Security @ Cisco Blogs
Google DeepMind News
Google DeepMind News
Security Archives - TechRepublic
Security Archives - TechRepublic
M
MIT News - Artificial intelligence
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V2EX - 技术
V2EX - 技术
Y
Y Combinator Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
大猫的无限游戏
大猫的无限游戏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Microsoft Security Blog
Microsoft Security Blog
Cisco Talos Blog
Cisco Talos Blog
T
Threatpost
Recent Commits to openclaw:main
Recent Commits to openclaw:main
S
SegmentFault 最新的问题
I
InfoQ
H
Hacker News: Front Page
D
Docker
Scott Helme
Scott Helme
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Blog — PlanetScale
Blog — PlanetScale
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
Netflix TechBlog - Medium
AWS News Blog
AWS News Blog
Know Your Adversary
Know Your Adversary
博客园 - 【当耐特】
T
Tor Project blog
U
Unit 42
H
Heimdal Security Blog
Microsoft Azure Blog
Microsoft Azure Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
P
Privacy & Cybersecurity Law Blog
PCI Perspectives
PCI Perspectives
美团技术团队
O
OpenAI News
T
Tailwind CSS Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
B
Blog
GbyAI
GbyAI
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
MyScale Blog
MyScale Blog

博客园 - KK2038

诚招.Net研发人员 盘点国内外不同特色的Web流量分析工具 IE无法设置短域名下Cookie 使用XamlReader.Load构建配置型自定义控件 Java/Js如何使用正则表达式匹配嵌套Html标签 几个有趣的Javascript Hack Hilo: Windows 7下C++应用程序开发实战演练 晒晒自己电脑里的常用工具 Visual Studio编辑器一次缩进/反缩进4个空格 Win7访问远程桌面最大化同时让任务栏可见 Sql Tips——Update语句也使用表别名(Table Alias) 关于字符编码,你所需要知道的 Silverlight 4+RIA Services--搜索引擎优化(SEO) 64位系统下IIS7 ISAPI处理器加载失败 为什么IIS7/7.5的Gzip不起作用 SSIS调用存储过程失败 当Google Analytics、Firefox和IIS走到了一起... VS2010的UI设计失误 微软技术社区精英计划——你也来加入吧
VS编译时自动引用Debug|Release版本的dll
KK2038 · 2011-04-10 · via 博客园 - KK2038

公司一些早期的项目,把所有工程都放到一个解决方案下了,导致整个解决方案编译很慢,而且也不便于类库的复用和维护。因此我们决定把工程按照功能划分到不同的解决方案里头,然后定期发布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即可。

希望此文对你有帮助。

== Kevin Yang ==