【Tip】如何讓引用的dll隨附的xml注釋文檔、pdb調試庫等文件不出現在項目輸出目錄中


項目輸出目錄(bin/debug|release)中經常是這個樣子:

main.exe
main
.pdb
a
.dll a.xml b.dll b.pdb b.xml ...

其中xml是同名dll的注釋文檔,pdb是調試庫。我們最終應該只想要exe和dll,除了手工刪,我知道的有兩招,可以讓項目生成后,xml和pdb不會出現:

1、利用項目【生成事件】。在項目\屬性中有個生成事件,分事前、事后兩個事件,於是可以在事后事件中寫上刪除語句。這里支持的是cmd命令行語句,示例:

del /f /q /a $(TargetDir)a.xml
del /f /q /a $(TargetDir)b.pdb

rem 也可用通配符
del /f /q /a $(TargetDir)x?x*.xml

有個問題,對web項目沒用,就是本地bin目錄中是沒了,但服務器上的bin目錄會有。我猜測web項目的發布動作並不是先生成在本地bin,完了再拷過去,而是有可能先生成在一個臨時目錄,完了再從臨時目錄分別拷到bin和遠端,所以只刪bin中的無濟於事,關鍵是刪臨時目錄,我猜測是obj目錄,改天實踐,有清楚的朋友望能指教。我此前一直用的就是這招,直到今天學到了下面的新招。

2、在項目csproj文件加入元素節點AllowedReferenceRelatedFileExtensions。具體如下:

<Project ...>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    ...
    <AllowedReferenceRelatedFileExtensions>
      <!-- Prevent default XML and PDB files copied to output in RELEASE. 
           Only *.allowedextension files will be included, which doesn't exist in my case.
       -->
      .allowedextension
    </AllowedReferenceRelatedFileExtensions> 
  </PropertyGroup>
...

AllowedReferenceRelatedFileExtensions從名稱上就能看出,它就是專門用來干這個的(相比,生成事件能做的事更多),父元素PropertyGroup通常分Debug和Release兩個節點(上面舉例的是Release節點),Allow...元素加在Debug里就在生成debug版本時起作用,release同理,可以debug/release都加,也可以有不同配置,比如debug時允許pdb,release時則阻止。.allowedextension就是允許包含的文件類型,比如.pdb就代表允許包含pdb文件,那么在bin中就可能會出現pdb。可以用分號分隔多個類型,比如.pdb;.xml,這樣則是pdb和xml都允許包含,不支持通配符;留空則是任何文件都允許,所以如果要阻止pdb和xml,必須弄一個它倆以外的擴展名,比如上面的.allowedextension。BTW,這招是從stackoverflow學到到的,http://stackoverflow.com/questions/2011434/preventing-referenced-assembly-pdb-and-xml-files-copied-to-output

需要說明,項目自身的pdb和xml是否生成,正確是在【項目\屬性\生成】中進行設置。生成事件法可以作用到項目自身的相關文件,但Allow...元素法不會,它只對所引用的程序集相關文件有效。

-文畢-


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM