如何将构建后事件限制为仅为一种类型的构建运行?

我正在使用事件将DLL文件复制到本地IIS虚拟目录,但我不希望在发布模式下的构建服务器上发生这种情况。


当前回答

您可以将配置名称传递给构建后脚本,并在那里检查它是否应该运行。

用$(ConfigurationName)传递配置名。

检查它取决于您如何实现构建后步骤——它将是一个命令行参数。

其他回答

这在Visual Studio 2015中为我工作。

我将所有DLL文件从位于与我的解决方案文件夹同一级别的库文件夹中的文件夹复制到正在构建的项目的目标目录。

使用项目目录中的相对路径,用..\..\lib两步往上走文件夹结构

MySolutionFolder ……。 自由

if $(ConfigurationName) == Debug (
xcopy /Y "$(ProjectDir)..\..\lib\*.dll" "$(TargetDir)"
) ELSE (echo "Not Debug mode, no file copy from lib")

像往常一样添加您的post build事件。然后保存项目,在记事本(或您喜欢的编辑器)中打开它,并向PostBuildEvent属性组添加条件。这里有一个例子:

<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>

我发现我可以在项目文件中添加多个条件,就像这样:

  <Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition=" '$(Configuration)' != 'Debug' AND '$(Configuration)' != 'Release' ">
      <Exec Command="powershell.exe -ExecutionPolicy Unrestricted -NoProfile -NonInteractive -File $(ProjectDir)postBuild.ps1 -ProjectPath $(ProjectPath) -Build $(Configuration)" />
  </Target>

在Visual Studio 2012中,你必须使用(我认为在Visual Studio 2010中也是如此)

if $(Configuration) == Debug xcopy

$(ConfigurationName)被列为宏,但没有分配。

比较:构建命令和属性的宏

或者(因为事件被放入一个批处理文件中,然后被调用),使用以下(在构建事件框中,而不是在批处理文件中):

if $(ConfigurationName) == Debug goto :debug

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

goto :exit

:debug
' Debug items in here

:exit

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