1. 程式人生 > 其它 >使用批處理命令轉移dll檔案

使用批處理命令轉移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) 生成的主輸出檔案的副檔名。它在副檔名的前面包括“.”。