作者:小色米虫_524 | 2023-09-04 17:38
如何将后期构建事件限制为仅针对一种类型的构建运行?我正在使用事件将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.
把它放在一条线上