【转】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。
如果添加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)\ 改為一個文件夾名字,這樣提供三個文件夾,應該也可以工作的
總結
以上是生活随笔為你收集整理的【转】VS编译时自动引用Debug|Release版本的dll的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 国寿周周利收益怎么算?附收益计算案例
 - 下一篇: 2017信用卡免息期最长多少天