24

我关注了 Scott Hanselman 的一篇博客文章,用于管理 PreBuild Events 的配置,并让它正常工作。

我现在想将我的配置拆分为几个不同的文件,因此需要在构建之前再次执行命令。问题是 PreBuild 事件文本都作为一个控制台命令执行。如何将其拆分为多个命令?

4

3 回答 3

44

原来问题是斯科特的例子不包括行首的call命令。只要您不想.bat使用不同的参数多次执行文件,这很好。

这:

call "$(ProjectDir)copyifnewer.bat" "$(ProjectDir)connectionStrings.config.$(ConfigurationName)" "$(ProjectDir)connectionStrings.config"
call "$(ProjectDir)copyifnewer.bat" "$(ProjectDir)appSettings.config.$(ConfigurationName)" "$(ProjectDir)appSettings.config"

对我来说很好。

于 2009-09-24T16:34:34.643 回答
5

我在 Windows 7 64 位上使用 Visual Studio 2010。

我找到了一个更适合我的解决方案,我将命令链接在一起&& ^,例如,编辑我的 .vcxproj xml 文件,如下所示:

    <PreBuildEvent>
      <Command>echo "hello 1" &amp;&amp; ^
echo "hello 2" &amp;&amp; ^
echo "hello 3"</Command>
      <Message>Performaing pre-build actions ...</Message>
    </PreBuildEvent>

我将三个命令链接在一起。如果前面的命令出错,'&&' 告诉 shell 停止执行。

注意,在.xml文件中,不能&&直接使用,所以'&&' 必须改为使用。还要注意^字符的使用,这是 cmd shell 的续行字符(如 BASH 的\char)。

每个新命令必须从行首开始。使用这种方法,可以链接任意数量的命令,但如果有任何失败,则链中的其余命令将不会被执行。

这是我的实际用例,我正在使用 Python 脚本执行一些环境检查,然后将预编译的头文件的调试文件复制到另一个子项目的目录:

    <PreBuildEvent>
        <Command>C:\Python27\python.exe "$(SolutionDir)check_path.py" 32 &amp;&amp; ^
copy "$(SolutionDir)h1ksim_lib\vc$(PlatformToolsetVersion).pdb" "$(IntDir)" /-Y > nul</Command>
        <Message>Performaing pre-build actions ...</Message>
    </PreBuildEvent>

复制命令的 > nul 使用可以防止任何输出出现在构建窗口中,所以当它说时我的队友不会被吓坏0 file(s) copied.

在子项目之间共享预编译头的参考在这里:

在 Visual Studio 中的项目之间共享预编译头文件

于 2013-04-26T19:15:06.657 回答
-1

您应该能够将命令放在单独的行上,然后每个命令将按顺序执行。或者,做同样事情的“骗子”方法如下:

  • 创建运行所需部分的新功能的第二个批处理文件,然后创建运行两个组件批处理文件的父批处理,并在预构建事件中运行该新批处理。例如:batch1.bat 修改文件 1,batch2.bat 修改文件 2,然后 batch3.bat 运行 batch1.bat 和 batch2.bat
于 2009-09-24T16:09:18.813 回答