項目輸出目錄(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...元素法不會,它只對所引用的程序集相關文件有效。
-文畢-