如何将所需的二进制文件(例如dll,图标,工具,doc)复制到bin文件夹中的目标目录中?
有一个明显的集成可能性:包括对源文件进行处理的文件,并在“复制到输出目录”中将文件属性标记为“始终复制”或“复制较新”。
但是,仅当二进制文件保留在主项目文件夹中时,此方法才有效。如果整理一下,然后将这些文件放在一个子文件夹中以与源文件区分开,则该子文件夹将在目标目录1:1中创建,而资源文件不在目标根目录中。
答案 0 :(得分:1)
回答我自己的问题以分享我的知识。
鉴于您要将所有文件复制到VS项目的子文件夹“ RuntimeEnv”中:
在任何项目文件的构建属性下,都有一个“构建事件”选项卡,其中包含构建前和构建后命令行的可能性,可以在不设置TFS构建定义的情况下包括此类副本或类似的构建要求。
您可以在其中包含类似批处理的命令,并可以访问一些预构建变量。例如,请参阅问题中的链接。
复制没有提供足够的功能。在下文中,我提到了xcopy和robocopy的解决方案
由于我更喜欢robocopy.exe,因为它非常快速,可靠并且是仅复制较新文件(/ XO)的内置选项,因此我使用以下命令代替了简单的“ copy”命令:
robocopy.exe /XO "$(ProjectDir)RuntimeEnv" "$(TargetDir)." >nul 2>&1
exit 0
robocopy的两个特长在这里解决:
“。”在“ $(TargetDir)”之后是必需的,因为robocopy 不喜欢以反斜杠结尾的路径,在这里就是这种情况。
最后一行是必需的,因为robocopy会以返回码退出 包含复制的文件数,因此“ 0”与 按预期成功。
可以添加一些MSBuild目标行来更改预期的返回码,但是在Post-Build事件中执行操作最简单。
HTH。
P.S。正如Hans Passant在评论中指出的那样,xcopy /D
是一个更简单的解决方案。
它是-并且如果robocopy的其他属性或参数都没有用,则可能更可取。
这将使行如下:
xcopy.exe /D /Y "$(ProjectDir)RuntimeEnv\*.*" "$(TargetDir)"
xcopy的输出行不会正常打扰,并提示构建后的情况-否则您也可以添加>nul 2>&1
。