如何运行Visual Studio生成后事件仅用于调试生成
时间:2020-03-06 14:53:23 来源:igfitidea点击:
如何将构建后事件限制为仅针对一种构建类型运行?我正在使用事件将DLL复制到本地IIS虚拟目录,但我不希望在发布模式下的生成服务器上发生这种情况。
解决方案
我们可以将配置名称传递到生成后脚本中,然后在其中检查它是否应该运行。
用$(ConfigurationName)传递配置名称
根据我们如何执行构建后步骤进行检查-这将是一个命令行参数
像平常一样添加发布构建事件。然后保存项目,在记事本(或者我们喜欢的编辑器)中将其打开,并将条件添加到PostBuildEvent属性组中。这是一个例子:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> <PostBuildEvent>start gpedit</PostBuildEvent> </PropertyGroup>
生成前和生成后事件作为批处理脚本运行。我们可以在$(ConfigurationName)上执行条件语句。
例如
if $(ConfigurationName) == Debug xcopy something somewhere
与任何项目设置一样,可以按"配置"配置buildevents,只需在"属性页面"对话框的下拉菜单中选择要更改的配置,然后编辑构建后的步骤
或者(由于将事件放入批处理文件中然后调用),请使用以下命令。
(在"生成事件"框中,而不是在批处理文件中):
if $(ConfigurationName) == Debug goto :debug :release signtool.exe .... xcopy ... goto :exit :debug ' debug items in here :exit
这样,我们可以对任何配置都具有事件,并且仍然可以使用宏对其进行管理,而不必将其传递到批处理文件中,并且请记住%1是$(OutputPath)等:
仅供参考,我们不需要使用goto。 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". )