我们能否在Visual Studio的后期构建事件命令行中执行一个 .bat 文件?

70

我们可以在Visual Studio的“后期生成事件命令行”中执行一个.bat文件吗?


1
也许比我更熟悉这个主题的人可以考虑将其编辑为更好的问题。元讨论的主题在此处。 - Martin Smith
3个回答

123

当然,这里有一个例子:

call "$(SolutionDir)scripts\copyifnewer.bat" "$(SolutionDir)libs\RLPL.Services.CertificateValidator.Basic.dll" "$(TargetDir)RLPL.Services.CertificateValidator.Basic.dll"
call "$(SolutionDir)scripts\copyifnewer.bat" "$(SolutionDir)libs\RLPL.Services.CertificateValidator.Common.dll" "$(TargetDir)RLPL.Services.CertificateValidator.Common.dll"

请注意可能会出现两个问题:

  1. 双引号的使用(请看每个部分是如何被 " 包围的)

  2. 如果你想要调用两个或多个批处理文件,请确保使用 call 命令,否则你可能会在找寻为什么第二个批处理文件没有执行而烦恼。


14
谢谢你关于“调用”的留言,它解决了我关于多次执行的问题。 - EvgeniyK
2
尽管SO现在要求我不要解释我的感激之情:+1表示同意第二点) - user472308
6
可能需要更改当前目录,因为默认情况下它在“Bin”文件夹内运行。我需要在解决方案目录中运行,所以对我来说是:在后期构建事件的第一行中使用“call cd $(SolutionDir)”命令。 - Alex M
2
你实际上如何设置这个?这个要放在csproj文件中吗? - Pangamma

32

是的,通过在后期构建事件编辑器中添加调用可以实现。

如果您转到项目的“属性”页面,应选择“生成事件”选项卡。您可以在“后期生成事件命令行”文本框中输入批处理文件的调用。

如果您想使用项目或解决方案中包含的路径引用批处理文件,可以单击“编辑后期生成...”按钮。这将打开“后期生成事件命令行”对话框。

此对话框有一个“宏>>”按钮,您可以单击该按钮。它将显示您可以用来引用解决方案中文件夹和文件的所有可用宏。

当您选择其中一个宏时,可以使用“插入”按钮将其插入到脚本中。


+1 但为了完整性,请注意divo在Jon Skeet的回答中关于使用宏指定项目特定批处理文件路径的评论。 - AAT
1
上述提及的答案已不存在。评论链为 Q. “如何给批处理文件路径?” 而响应的评论为 A. “你可以使用硬编码路径,或者更好的方法是使用单击“宏”按钮时可用的变量。例如,“$(ProjectDir)”(不带引号)将是 Visual Studio 项目文件所在目录。” - Martin Smith
如何为整个解决方案而不是单个项目执行此操作? - Tomáš Zato

9

除了调用 .bat 文件之外,您还可以直接在 Pre-build/Post-build 字段中输入批处理命令(即从 Windows 控制台 cmd.exe 中可用的普通命令)。这可能更可取,因为它意味着您不必单独维护批处理文件,因为所有命令都将成为项目的一部分。


2
将后构建脚本与项目一起提交到版本控制系统同样容易。实际上,这更容易测试,它与您的文件一起进行版本控制,并且不会被埋在项目文件中。就个人而言,我没有真正好的理由(但有很多反对意见)在您的后构建操作属性中除了一行CALL之外放置任何东西。 - jrypkahauer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接