2

我在Visual Studio中使用預生成事件來運行執行一些代碼生成(特別是,我運行SqlMetal.exe生成LinqToSql代碼)的批處理(.bat)文件。Visual Studio預編譯事件是否保證在編譯開始之前完成?

批處理文件是否保證在編譯開始前完成?還是它異步運行批處理?

底線:我想確保新代碼被編譯,而不是舊代碼。

如果不能保證 - 有哪些解決方案可用?

+1

我很確定批處理文件會完成,但這並不意味着其中產生的進程已經退出。 – EricLaw 2010-01-04 00:46:00

回答

6

是的。但請注意,如果您在預生成中有多個步驟,則只會檢查最後一步的錯誤。有關更多信息,請參閱Gotcha! Visual Studio Pre/Post-Build Events

+0

謝謝,謝謝你的提示! +1雖然這裏似乎有點不一致。看看EricLaw的評論(上圖)。 – devuxer 2010-01-04 03:25:24

+0

我們都是正確的:-)如果你調用一個本身產生異步進程的批處理文件,那麼批處理文件本身保證完成,但異步處理不是。如果你想讓你的批處理文件等待產生的進程,使用「start/wait」。 – 2010-01-04 04:01:27

+0

啊,thx :)我不相信我有任何異步過程。是否使用'start/wait'等同於不使用'start'?我基本上只是運行一對夫婦.exe,需要幾秒鐘的時間,並執行一些重命名和移動操作。 – devuxer 2010-01-04 04:24:24

3

該批處理文件將完整只有進程後,它已開始將自己完成的,除非你在批處理文件中使用開始命令。作爲一個簡單的測試,您可以像這樣創建一個批處理文件:

notepad.exe 

並將其設置爲您的預生成事件。您將看到,只有在關閉記事本後才能開始構建。

+0

+1謝謝,我不會在我的任何批處理中使用'start'命令。 – devuxer 2010-01-04 04:24:58