引用同一个解决方案中的项目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) 生成的主输出文件的文件扩展名。它在文件扩展名的前面包括“.”。
标签:文件,扩展名,TargetDir%,批处理,move,dll,Dll,转移 From: https://www.cnblogs.com/ny-wmq/p/16938951.html