【问题标题】:Are Visual Studio pre-build events guaranteed to finish before compiling starts?Visual Studio 预构建事件是否保证在编译开始之前完成?
【发布时间】:2011-01-01 02:28:39
【问题描述】:

我在 Visual Studio 中使用预构建事件来运行批处理 (.bat) 文件,该文件执行一些代码生成(具体来说,我正在运行 SqlMetal.exe 来生成 LinqToSql 代码)。

批处理文件是否保证在编译开始之前完成?还是它异步运行批处理?

底线:我想确保编译新代码,而不是旧代码。

如果不能保证 - 有哪些可用的解决方案?

【问题讨论】:

  • 我很确定批处理文件会完成,但这并不意味着其中产生的进程已经退出。

标签: visual-studio visual-studio-2008 linq-to-sql code-generation batch-file


【解决方案1】:

是的。但请注意,如果您在预构建中有多个步骤,则只会检查最后一步是否有错误。请参阅Gotcha! Visual Studio Pre/Post-Build Events 了解更多信息。

【讨论】:

  • 感谢并感谢您的提示! +1 不过,这里似乎有些分歧。看看 EricLaw 的评论(上图)。
  • 我们都是对的 :-) 如果您调用的批处理文件本身会产生异步进程,那么批处理文件本身可以保证完成,但异步进程不会。如果您希望批处理文件等待生成的进程,请使用“start /wait”。
  • 啊,谢谢 :) 我不相信我有任何异步进程。使用start /wait 是否等同于根本不使用start?我基本上只是运行几个需要几秒钟的 .exe 并执行几个重命名和移动操作。
  • start /wait 几乎与完全不使用 start 相同。但是,它会为生成的进程打开一个新窗口。如果不需要,那么您可以省略它。
【解决方案2】:

批处理文件只有在它开始的进程自己完成后才会完成,除非您在批处理文件中使用 start 命令。作为一个简单的测试,您可以像这样创建一个批处理文件:

notepad.exe

并将其设置为您的预构建事件。您将看到只有在关闭记事本后才会开始构建。

【讨论】:

  • +1 谢谢,我没有在任何批次中使用start 命令。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
  • 2011-01-06
  • 1970-01-01
  • 2012-04-17
相关资源
最近更新 更多