我在后期构建事件中使用XCOPY将已编译的DLL从其输出文件夹复制到主应用程序的输出文件夹。 DLL正被复制到主app输出文件夹中的“Modules”子文件夹,如下所示:
xcopy "$(TargetPath)" "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\"
如果Modules文件夹存在,该命令工作正常,但我在测试期间发现如果文件夹不存在,XCOPY不会创建它,并且命令失败。
是否存在XCOPY开关,如果该文件夹不存在,将导致该文件夹被创建?如果没有,如果它不存在,我将添加到我的post-build事件中以创建该文件夹?谢谢你的帮助。
答案 0 :(得分:106)
使用“/ I”的答案正在工作但是有一点小技巧 - 在目标中你必须以字符\结尾告诉xcopy目标是目录而不是文件!
示例:
xcopy "$(TargetDir)$(TargetName).dll" "$(SolutionDir)_DropFolder" /F /R /Y /I
不起作用并返回代码2,但是这一个:
xcopy "$(TargetDir)$(TargetName).dll" "$(SolutionDir)_DropFolder\" /F /R /Y /I
我的示例中使用的命令行参数:
/ F - 显示完整来源&目标文件名
/ R - 这将覆盖只读文件
/ Y - 禁止提示覆盖现有文件
/ I - 假设目的地是目录(但必须以\结尾)
答案 1 :(得分:46)
我在命令行上使用
尝试了这个D:\>xcopy myfile.dat xcopytest\test\
并正确创建了目标目录。
如果没有,您可以使用mkdir
命令创建目标目录,并启用cmd
的命令扩展名,如
cmd /x /c mkdir "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\"
('/ x'启用命令扩展,以防系统默认情况下未启用它们,我不熟悉cmd
)
使用
cmd /?
mkdir /?
xcopy /?
了解更多信息:)
答案 2 :(得分:15)
我讨厌PostBuild步骤,它允许在构建工具的权限范围之外发生太多事情。我相信让MSBuild管理复制过程并进行更新会更好。您可以像这样编辑.csproj文件:
<Target Name="AfterBuild" Inputs="$(TargetPath)\**">
<Copy SourceFiles="$(TargetPath)\**" DestinationFiles="$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\**" OverwriteReadOnlyFiles="true"></Copy>
</Target>
答案 3 :(得分:14)
将/ i与xcopy一起使用,如果该目录不存在,则会创建该目录 对你而言。
答案 4 :(得分:6)
您可以使用robocopy:
robocopy "$(TargetPath)" "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules" /E
答案 5 :(得分:1)
我试过这个命令。这对我有用。
if "$(OutDir)"=="bin\Debug\" goto Visual
:TFSBuild
goto exit
:Visual
xcopy /y "$(TargetPath)$(TargetName).dll" "$(ProjectDir)..\Demo"
xcopy /y "$(TargetDir)$(TargetName).pdb" "$(ProjectDir)..\Demo"
goto exit
:exit
答案 6 :(得分:0)
尝试/ E
获取完整的选项列表:xcopy /?
答案 7 :(得分:0)
一个简单的简短答案是这样的:
xcopy /Y /I "$(SolutionDir)<my-src-path>" "$(SolutionDir)<my-dst-path>\"
答案 8 :(得分:0)
只需输入引号斜杠分隔符 "/" 并添加到最终目标 2 个反斜杠 "\\"
它将创建新文件夹来复制和复制需要的文件(-s)。
xcopy ".\myfile" "....folder1/folder2/destination\\"