如何仅为debugging版本运行Visual Studio后生成事件

我怎样才能限制我的后生成事件只运行一种types的构build? 我正在使用这些事件来将DLL复制到本地IIS虚拟目录,但是我不希望在发布模式下在构build服务器上发生这种情况。

生成前和生成后事件以批处理脚本运行。 你可以在$(ConfigurationName)上做一个条件语句。

例如

 if $(ConfigurationName) == Debug xcopy something somewhere 

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

像正常一样添加您的发布后事件。 然后保存你的项目,在记事本(或你最喜欢的编辑器)中打开它,并添加条件到PostBuildEvent属性组。 这是一个例子:

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

或者(因为事件被放入batch file中,然后调用),请使用以下内容。 (在“生成”事件框中,而不是在batch file中):

 if $(ConfigurationName) == Debug goto :debug :release signtool.exe .... xcopy ... goto :exit :debug ' debug items in here :exit 

通过这种方式,您可以拥有任何configuration的事件,并且仍然使用macros来pipe理它,而不必将它们传递到batch file中并记住%1是$(OutputPath)等等:

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。

您可以将configuration名称传递给构build后脚本,并在其中检查它是否应该运行。

使用$(ConfigurationName)传递configuration名称

检查它是基于你如何实现后构build步骤 – 这将是一个命令行参数

在VS 2012中,你必须使用(我也在VS 2010中)

 if $(Configuration) == Debug xcopy 

$(ConfigurationName)被列为一个macros,但没有被分配。

在这里输入图像说明

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

这在Visual Studio 2015中适用于我。
我将位于与解决scheme文件夹相同级别的lib文件夹中的文件夹中的所有dll文件复制到正在构build的项目的targetdirectory中。
使用我的项目目录中的相对path,并使用.. \ .. \ lib进行两个步骤

MySolutionFolder
….我的项目

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

与任何项目设置一样,可以为每个configurationconfigurationbuildevents,只需在“属性页”对话框的下拉列表中select要更改的configuration,然后编辑后期构build步骤