在實際開發過程中,一個公共使用的類庫,在項目生成DLL后需要被復制到不同的目錄下被引用,是不是覺得每次生成之后都需要人工復制是很麻煩的一件事情
我們可以利用VS中的項目生成事件屬性來進行生成后的DLL復制到指定的目錄,或者進去其他的操作,比如打包成.zip的壓縮包
屬性如圖:
第一:需要在生成前進行操作,就在預先生成事件命令行寫需要執行的bat代碼,如果不會請百度如何寫。
這里記錄下我項目中需要使用的代碼:
if not exist $(ProjectDir)..\..\SiteDll\ClientBin\Modules md $(ProjectDir)..\..\SiteDll\ClientBin\Modules\
這里需要解析下,$(ProjectDir)是VS的宏定義,生成的是當前項目的目錄路徑
這一行代碼的作用是,如果不存在modules這個文件夾則創建一個
第二:生成后要進行復制dll到指定路徑,把dll壓縮成zip格式的壓縮文件,這里根據不同的需求作出不同的處理,
代碼如下:
copy $(TargetPath) $(ProjectDir)..\..\ProjDll\$(TargetFileName)
if exist "%ProgramFiles%\WinRAR\winrar.exe" ("%ProgramFiles%\WinRAR\winrar.exe" a "$(ProjectDir)bin\Debug\WorkflowDesigner.dll.zip" "$(ProjectDir)bin\Debug\WorkflowDesigner.dll" )
copy $(TargetPath).zip $(ProjectDir)..\..\SiteDll\clientbin\Modules\$(TargetFileName).zip
copy $(TargetPath).zip $(ProjectDir)..\LEGS.Web\clientbin\Modules\$(TargetFileName).zip
下面解析下以上的代碼
1、copy $(TargetPath) $(ProjectDir)..\..\ProjDll\$(TargetFileName)
注意:$(TargetPath)生成的是完整的文件目錄,比如DLL的項目名稱為abc這里生成的路徑如d:\tets\bin\debug\abc.dll
2、if exist "%ProgramFiles%\WinRAR\winrar.exe" ("%ProgramFiles%\WinRAR\winrar.exe" a "$(ProjectDir)bin\Debug\WorkflowDesigner.dll.zip" "$(ProjectDir)bin\Debug\WorkflowDesigner.dll" )
這里查看了下WinRaR的幫助文檔就是利用bat語句進行調用winrar來把文件壓縮成zip格式的壓縮文件,先判斷ProgramFiles目錄下是否存在winrar.exe文件,存在則調用
命令為:"%ProgramFiles%\WinRAR\winrar.exe" a "壓縮后的目標文件" ""需要壓縮的文件
3、copy $(TargetPath).zip $(ProjectDir)..\..\SiteDll\clientbin\Modules\$(TargetFileName).zip
copy $(TargetPath).zip $(ProjectDir)..\LEGS.Web\clientbin\Modules\$(TargetFileName).zip
這里的代碼很簡單,就是復制文件到指定目錄而已