首页 文章

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

提问于
浏览
536

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

9 回答

  • 117

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

    例如

    if $(ConfigurationName) == Debug xcopy something somewhere
    
  • 473

    或者(因为事件被放入批处理文件然后调用),请使用以下命令 . (在Build事件框中,不在批处理文件中):

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

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

  • -2

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

  • -2

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

    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 .

  • 671

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

    MySolutionFolder
    ....我的项目

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

    在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

  • -1

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

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

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

    使用$(ConfigurationName)传递配置名称

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

相关问题