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

时间:2008-09-29 18:41:34

标签: visual-studio build-process

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

10 个答案:

答案 0 :(得分:692)

构建前和构建后事件作为批处理脚本运行。您可以在$(ConfigurationName)上执行条件语句。

例如

if $(ConfigurationName) == Debug xcopy something somewhere

答案 1 :(得分:493)

仅供参考,您不需要使用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".
)

答案 2 :(得分:121)

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

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

答案 3 :(得分:103)

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

if $(ConfigurationName) == Debug goto :debug

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

goto :exit

:debug
' debug items in here

:exit

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

答案 4 :(得分:14)

从Visual Studio 2019开始,现代的.csproj格式支持直接在Target元素上添加条件:

<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Debug'">
    <Exec Command="nswag run nswag.json" />
</Target>

用户界面没有提供设置方法,但是,如果您通过用户界面进行更改,它确实可以安全地保留Configuration属性。

答案 5 :(得分:12)

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。

答案 6 :(得分:4)

您可以将配置名称传递给后期构建脚本并在其中进行检查以查看它是否应该运行。

使用$(ConfigurationName)

传递配置名称

检查它是基于如何实现构建后步骤 - 它将是一个命令行参数

答案 7 :(得分:-1)

这在Visual Studio 2015中适用于我 我将所有dll文件从位于与我的解决方案文件夹相同级别的lib文件夹中的文件夹复制到正在构建的项目的目标目录中。
使用我的项目目录中的相对路径,并使用.. \ .. \ lib上升文件夹结构两个步骤

MySolutionFolder
.... MyProject的

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

答案 8 :(得分:-2)

与任何项目设置一样,可以按配置配置构建代码,只需在“属性页”对话框的下拉列表中选择要更改的配置,然后编辑构建后步骤

答案 9 :(得分:-2)

在VS 2012中你必须使用(我认为在VS 2010中)

if $(Configuration) == Debug xcopy

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

enter image description here

比较:http://msdn.microsoft.com/en-us/library/c02as0cs(v=vs.110).aspx