【问题标题】:Correct syntax to copy and overwrite a file in a post build event在构建后事件中复制和覆盖文件的正确语法
【发布时间】:2012-04-25 20:22:44
【问题描述】:

在 Windows 7 上运行的 VS2010 的构建后事件中,将文件复制并始终覆盖到目标目录的最佳方法是什么。

目前我正在使用

robocopy $(SolutionDir) $(TargetDir) "Morning Report Template.xlsm"

我也尝试过使用 Xcopy(带有 /Y),甚至只是简单的复制。但我还没有让它正常工作。要么我得到诸如“命令“robocopy C:\Working\Projects\SAFEXQueryForm\C:\Working\Projects\SAFEXQueryForm\SAFEXQueryForm\bin\Release\“Morning Report Template.xlsm””之类的构建错误,代码为 1。”否则它只是不复制。

我需要它每次都复制和覆盖,而不会出现构建错误,我还希望更改我知道 Robocopy 无法做到的文件名。

我做错了什么?最好的方法是什么?

【问题讨论】:

  • 复制 /Y "$(SolutionDir)\Morning Report Template.xlsm" $(TargetDir) ?
  • 什么都不做...还有其他设置吗?
  • @Tom QUArendon:如果我清理构建并删除文件,那么该代码会复制文件。如果我删除文件并只是构建,那么它不会复制。我怎样才能让它始终执行?
  • 啊,我想我明白了。如果我理解正确,问题与 COPY 操作无关,而是与每次在项目上选择“构建”时让 Visual Studio 实际执行复制有关?也就是说,大概如果您按照您的描述进行操作,您会收到一条消息,指出该项目是最新的 00 它实际上根本没有运行构建,因此“构建后事件”根本不会运行。
  • 是的,复制操作总是在命令提示符下工作。那么,您是说如果按 F5 或单击绿色播放按钮,则不一定会调用构建后事件?为什么不?有没有你知道的替代品?它也没有解释为什么 robocopy 给我错误...

标签: visual-studio-2010 xcopy post-build-event robocopy


【解决方案1】:

编辑 2015/11/23

这个答案提供了一个更好的方法:https://stackoverflow.com/a/4596552/1011724。您可以将文件添加到项目中,然后更改文件的“复制到输出目录”属性。


原答案

我仍然不知道我的原始语法有什么问题,也不知道如何让 VS 相信Robocopy 的成功退出代码是 1,但这就是我现在所拥有的,而且它似乎可以工作,唯一的区别是我更改了目录结构,但这没关系(恐怕我不知道我是否在此期间进行了其他更改,这是很久以前的事了)

xcopy "$(SolutionDir)\Additional Files\Morning Report Template.xlsm" "$(TargetDir)" /Y

我还将 Run post build 事件下拉设置为 On successful build

【讨论】:

    【解决方案2】:

    您需要使用自定义构建操作来实现此目的。有关详细信息,请参阅http://msdn.microsoft.com/en-US/library/hefydhhy(v=vs.80).aspx,但这是我尝试过的。

    我将输入文件添加到项目中。然后选择文件并显示属性页面(右键单击-> 属性)。在 General 页面上,确保“Item Type”为“Custom Build Tool”。

    您可能需要关闭并重新打开属性对话框,但是将“项目类型”更改为“自定义构建工具”后,属性对话框中应该会有一个“自定义构建工具”页面。然后,您可以填写命令行。确保使用我们的自定义构建步骤生成的文件的名称填写“输出”部分。

    然后,您应该会发现,只要项目发现输入文件的日期大于输出文件的日期,就会构建并运行自定义构建步骤,我相信这就是您想要实现的目标。

    【讨论】:

    • 这听起来像我想要的,我会在星期一早上试一试。非常感谢!
    • 我想试一试,但我似乎找不到文件的属性页面。 (也不是链接中提到的配置框)。我右键单击项目并选择“添加现有项目”,选择文件(.xlsm)。然后我右键单击解决方案资源管理器中的文件并选择属性,但我得到的只是普通的属性资源管理器,就像你在 win 表单设计器中获得的控件一样。找不到“项目类型”。有一个 Build Action 下拉菜单和一个 Custom Tool 文本字段。我哪里出错了?
    • 在普通文件的属性对话框中,左侧有一个树,其中包含“配置”和“常规”。 “配置”和“常规”都链接到右侧的同一属性页面。它包含一个设置“从构建中排除”,默认为“否”,以及一个属性“项目类型”,默认为“不参与构建”。你有什么项目类型?我正在处理 Visual C++ 项目。
    • Visual C#,除非我找错地方,否则我没有“配置”或“常规”。而且 - 上面的 robocopy 代码实际上是有效的,但出于某种原因,VS 将退出代码 1(表示成功的 robocopy)视为错误代码,所以也许根本不需要自定义构建事件?只需要找到一种方法来说服 VS 以 1 退出的 robocopy 不是错误……我不知道该怎么做:/
    • 您当然可以让 Visual Studio 为您进行复制,如果您这样做,它将确保仅在必要时才需要复制它(即如果过时)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多