如何运行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".
)