代码之家  ›  专栏  ›  技术社区  ›  JC.

如何仅为调试生成运行Visual Studio生成后事件

  •  544
  • JC.  · 技术社区  · 17 年前

    如何将生成后事件限制为仅针对一种生成类型运行?

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

    9 回复  |  直到 5 年前
        1
  •  801
  •   Jakub Konecki    13 年前

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

    例如

    if $(ConfigurationName) == Debug xcopy something somewhere
    
        2
  •  543
  •   Peter Mortensen icecrime    5 年前

    仅供参考,您不需要使用goto。贝壳 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".
    )
    
        3
  •  133
  •   Peter Mortensen icecrime    5 年前

    像平常一样添加生成后事件。然后保存项目,在中打开它 Notepad (或您喜爱的编辑器),并将条件添加到PostBuildEvent属性组。下面是一个例子:

    <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
        <PostBuildEvent>start gpedit</PostBuildEvent>
    </PropertyGroup>
    
        4
  •  109
  •   Peter Mortensen icecrime    5 年前

    或者(由于事件被放入批处理文件,然后被调用),请使用以下命令(在生成事件框中,而不是批处理文件中):

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

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

        5
  •  26
  •   Daniel Earwicker    5 年前

    .csproj Target 要素:

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

    用户界面没有提供一种设置方法,但它似乎可以安全地离开 Configuration 如果您通过UI进行更改,则属性已就位。

        6
  •  17
  •   Peter Mortensen icecrime    5 年前

    if "$(ConfigurationName)"=="My Debug CFG" ( xcopy "$(TargetDir)test1.tmp" "$(TargetDir)test.xml" /y) else ( xcopy "$(TargetDir)test2.tmp" "$(TargetDir)test.xml" /y)
    

    这里没有错误。

        7
  •  5
  •   Peter Mortensen icecrime    5 年前

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

    将配置名称传递给 $(ConfigurationName) .

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

        8
  •  -1
  •   Peter Mortensen icecrime    5 年前

    我将所有DLL文件从与解决方案文件夹处于同一级别的库文件夹中复制到正在生成的项目的targetdirectory中。

    MySolutionFolder
    ……我的项目
    解放党

    if $(ConfigurationName) == Debug (
    xcopy /Y "$(ProjectDir)..\..\lib\*.dll" "$(TargetDir)"
    ) ELSE (echo "Not Debug mode, no file copy from lib")
    
        9
  •  -3
  •   Peter Mortensen icecrime    5 年前

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

        10
  •  -3
  •   Peter Mortensen icecrime    5 年前

    if $(Configuration) == Debug xcopy
    

    $(ConfigurationName) 已作为宏列出,但未指定。

    Enter image description here

    比较: Macros for Build Commands and Properties