使用批處理命令轉移dll檔案
引用同一個解決方案中的專案dll或者NuGet安裝的dll時,需要實時更新dll,但dll只能自動複製到軟體啟動目錄。
可以使用生成後事件命令列來轉移dll檔案,如下圖:
直接使用批處理命令轉移dll檔案,仍然以VSDebug為例,如下所示:
::@echo off ::設定相關路徑 set TargetDir=D:\軟體程式碼\程式碼除錯\VSDebug\VSDebug\bin\Debug\ set ProjectName=VSDebug ::檢查Lib、Dll資料夾路徑是否存在 IF NOT EXIST "%TargetDir%Lib" MD "%TargetDir%Lib" IF NOT EXIST "%TargetDir%Dll" MD "%TargetDir%Dll" ::設定需要放到Lib路徑下的dll setlocal enabledelayedexpansion ::以Newtonsoft.Json.dll為例 set Libs[1]=Newtonsoft.Json set length=1 ::轉移指定dll檔案到Lib資料夾 for /l %%n in (1,1,%length%) do ( echo 轉移 !Libs[%%n]! 相關檔案 move "%TargetDir%!Libs[%%n]!.dll" "%TargetDir%Lib" move "%TargetDir%!Libs[%%n]!.xml" "%TargetDir%Lib" move "%TargetDir%!Libs[%%n]!.pdb" "%TargetDir%Lib" ) ::沒有指定的dll放到Dll資料夾 move "%TargetDir%*.dll" "%TargetDir%Dll" move "%TargetDir%*.xml" "%TargetDir%Dll" move "%TargetDir%*.pdb" "%TargetDir%Dll" ::把主程式的相關的檔案轉出來 move "%TargetDir%Dll\%ProjectName%.xml" "%TargetDir%%ProjectName%.xml" move "%TargetDir%Dll\%ProjectName%.pdb" "%TargetDir%%ProjectName%.pdb" ::pause
@echo off 和pause組合使用的作用是在以bat檔案執行完成後不關閉cmd,這裡我們是以命令列直接加在生成後事件中的,
所以這裡沒有用到此組命令,故進行註釋不使用
巨集說明
$(ConfigurationName) 當前專案配置的名稱(例如,“Debug|Any CPU”)。
$(OutDir) 輸出檔案目錄的路徑,相對於專案目錄。這解析為“輸出目錄”屬性的值。它包括尾部的反斜槓“\”。
$(DevEnvDir) Visual Studio的安裝目錄(定義為驅動器 + 路徑);包括尾部的反斜槓“\”。
$(PlatformName) 當前目標平臺的名稱。例如“AnyCPU”。
$(ProjectDir) 專案的目錄(定義為驅動器 + 路徑);包括尾部的反斜槓“\”。
$(ProjectPath) 專案的絕對路徑名(定義為驅動器 + 路徑 + 基本名稱 + 副檔名)。
$(ProjectName) 專案的基本名稱。
$(ProjectFileName) 專案的檔名(定義為基本名稱 + 副檔名)。
$(ProjectExt) 專案的副檔名。它在副檔名的前面包括“.”。
$(SolutionDir) 解決方案的目錄(定義為驅動器 + 路徑);包括尾部的反斜槓“\”。
$(SolutionPath) 解決方案的絕對路徑名(定義為驅動器 + 路徑 + 基本名稱 + 副檔名)。
$(SolutionName) 解決方案的基本名稱。
$(SolutionFileName) 解決方案的檔名(定義為基本名稱 + 副檔名)。
$(SolutionExt) 解決方案的副檔名。它在副檔名的前面包括“.”。
$(TargetDir) 生成的主輸出檔案的目錄(定義為驅動器 + 路徑)。它包括尾部的反斜槓“\”。
$(TargetPath) 生成的主輸出檔案的絕對路徑名(定義為驅動器 + 路徑 + 基本名稱 + 副檔名)。
$(TargetName) 生成的主輸出檔案的基本名稱。
$(TargetFileName) 生成的主輸出檔案的檔名(定義為基本名稱 + 副檔名)。
$(TargetExt) 生成的主輸出檔案的副檔名。它在副檔名的前面包括“.”。