当前位置:  开发笔记 > 编程语言 > 正文

如何仅为调试版本运行Visual Studio后期构建事件

如何解决《如何仅为调试版本运行VisualStudio后期构建事件》经验,为你挑选了5个好方法。

如何将后期构建事件限制为仅针对一种类型的构建运行?我正在使用事件将DLL复制到本地IIS虚拟目录,但我不希望在发布模式下在构建服务器上发生这种情况.



1> Joseph Daigl..:

构建前和构建后事件作为批处理脚本运行.你可以做一个条件语句$(ConfigurationName).

例如

if $(ConfigurationName) == Debug xcopy something somewhere


我发现整个命令需要在一行上,否则你将"退出代码255"
你可以在if命令中使用括号(参见我的答案中的一个例子)
奇怪,也许只是我,但我尝试添加if条件,现在我得到这个错误 - 错误退出代码255
您还可以使用gotos/labels来获得更全面的解决方案(请参阅我的7月24日答案)

2> gbjbaanb..:

仅供参考,您不需要使用转到.shell IF命令可以与圆括号一起使用:

if $(ConfigurationName) == Debug (
  copy "$(TargetDir)myapp.dll" "c:\delivery\bin" /y
  copy "$(TargetDir)myapp.dll.config" "c:\delivery\bin" /y
) ELSE (
  echo "why, Microsoft, why".
)


我还要补充一点,要小心需要紧跟if语句的左括号,好像它在下一行会生成一个错误代码
如果收到错误代码255,请使用"$(ConfigurationName)"`(注意引号)
请注意,如果你在$(ConfigurationName)周围使用"",你还需要在Debug这个词周围引用 - shell命令IF语句非常......文字...当涉及字符串比较时.
在我的情况下使用Visual Studio 2017` $(ConfigurationName)`是空的(构建后事件命令行).`if"$(Configuration)"=="Debug"`为我工作.顺便说一句,如果你想在所有其他配置中做某事,请使用`if NOT'$(Configuration)"=="Debug"`.
注意,为了摆脱255,我不得不在$(ConfigurationName)周围使用""并删除条件周围的空格,例如,如果"$(ConfigurationName)"=="Release"< - 周围没有空格==

3> Franci Penov..:

像平常一样添加你的帖子构建事件.然后保存项目,在记事本(或您喜欢的编辑器)中打开它,并将条件添加到PostBuildEvent属性组.这是一个例子:


    start gpedit


您不需要在记事本中打开它,您可以留在Visual Studio中.您可以右键单击项目文件,单击"卸载项目",然后再次右键单击并单击"编辑".您现在可以使用语法着色编辑{{csproj}}文件.再次右键单击,但现在单击"重新加载项目"以重新加载.
这有效,但它会强制您对项目文件源中的事件进行所有设计工作.其他条件构建事件声明也从IDE隐藏.
我不得不说这对我来说是更好的答案,首选方法不起作用.

4> CestLaGalere..:

或者(因为事件被放入批处理文件然后被调用),请使用以下内容.(在Build事件框中,不在批处理文件中):

if $(ConfigurationName) == Debug goto :debug

:release
signtool.exe ....
xcopy ...

goto :exit

:debug
' debug items in here

:exit

通过这种方式,您可以为任何配置创建事件,并且仍然可以使用宏来管理它,而不必将它们传递到批处理文件中并记住%1是$(OutputPath)等:


感谢microsoft,迫使我们在我们的C#应用​​程序中使用goto.
大多数编译器都会将代码转换为更简单的指令,例如goto.逆向工程不能将更简单的指令放在您希望看到的"更好"更复杂的指令中.我不知道微软如何强制我们使用goto,或者这与这篇文章有什么关系.
如果你有机会在反射器中查看一些代码,编译器会将很多switch/case语句转换为goto.
如果你愿意,你可以删除`if`并使用`goto:$(ConfigurationName)`

5> Eric Bole-Fe..:

Visual Studio 2015:正确的语法是(保持在一行):

if "$(ConfigurationName)"=="My Debug CFG" ( xcopy "$(TargetDir)test1.tmp" "$(TargetDir)test.xml" /y) else ( xcopy "$(TargetDir)test2.tmp" "$(TargetDir)test.xml" /y)

这里没有错误255.


把它放在一条线上
推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有