使用批处理命令转移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 ::检查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,这里我们是以命令行直接加在生成后事件中的,
所以这里没有用到此组命令,故进行注释不使用
当运行命令过多时,直接添加命令太过繁琐且不美观,这时可以将所需执行的命令编辑为bat文件,在生成事件中直接调用bat
如下图:
宏说明(可以通过点击编辑后期生成->宏,查看各项具体值)
$(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) 生成的主输出文件的文件扩展名。它在文件扩展名的前面包括“.”。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!