如何在Visual Studio中临时禁用构建事件?

13

有没有一种方法可以暂时禁用预先构建和后期构建事件?

即构建时不执行构建事件(它们需要一些时间,但并不总是必须运行)

目前,我正在进行缩小文件和其他一些操作,但并不总是需要这些操作。

5个回答

17

禁用构建事件最简单的方法是传递空值:

msbuild your.sln /p:PreBuildEvent=;PostBuildEvent=

太好了,我的TeamCity构建由于新添加的构建事件而失败。将此添加到“命令行参数”字段中修复了它。 - Ryan Bosinger

15

只有在发布版本中才会关注诸如代码最小化之类的内容。因此,您可以像这样跳过它:

if "$(ConfigurationName)" == "Debug" goto skip
; stuff here...
:skip

有一些其他的宏可以使用,点击编辑按钮和宏>>按钮以查看它们。环境变量也可以测试,使用%varname%。但是设置起来要困难得多。


如果你想使用“不等于(NOT EQUAL)”来实现这一点,只需将“==”替换为“NEQ”。 - Luis Gouveia

6

我也试着使用了一下 msbuild foo.vcxproj /p:PreBuildEvent= /p:PostBuildEvent=,但是对我来说没有起作用,可能是因为我在使用自定义属性文件。

然而,我发现这个命令/p:PostBuildEventUseInBuild=false是有效的。


我遇到了完全相同的情况,/p:PostBuildEventUseInBuild=false 对我也起作用了。谢谢! - sthlm58
同样的问题,/p:PostBuildEvent= 不起作用,但是 /p:PostBuildEventUseInBuild=false 可以。 - Zitrax

4

请检查您的后期构建事件设置。在“生成事件”选项卡上,将“运行后期构建事件”组合框值更改为“当构建更新项目输出”时。只有在更新输出程序集时才会执行后期构建事件。

或者

使用MSBuild命令来构建您的解决方案(这对于多解决方案项目非常有用)。 在您的电脑上创建一个名为“DisableBuildEvents.msbuild”的文件。 DisableBuildEvents.msbuild内容:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="PostBuildEvent"/>
  <Target Name="PreBuildEvent" />
</Project>

在命令行中设置 CustomAfterMicrosoftCommonTargets 属性并执行 MsBuild:

MSBuild.exe YourSolution.sln /t:Build p:CustomAfterMicrosoftCommonTargets="c:\DisableBuildEvents.msbuild"

注意:CustomAfterMicrosoftCommonTargets 的值应该是完整的路径名。

0

通过用户设置文件禁用构建事件

这里还有另一个选择,尚未提及的是修改.vcxproj.user文件。要禁用构建事件,请将此文件放在您的.vcxproj旁边:

<!-- ProjectName.vcxproj.user -->
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemDefinitionGroup>
    <PreBuildEvent>
      <Command>echo Skipping pre-build event!</Command>
    </PreBuildEvent>
    <PostBuildEvent>
      <Command>echo Skipping post-build event!</Command>
    </PostBuildEvent>
  </ItemDefinitionGroup>
</Project>

这将在控制台上打印一条消息,而不是运行项目中定义的预/后构建事件。使用<ItemDefinitionGroup>标签是很重要的,以使其正常工作。
如其他答案中所提到的,还可以使用以下属性完全禁用自定义构建事件:
<PropertyGroup>
  <PreBuildEventUseInBuild>false</PreBuildEventUseInBuild>
  <PreLinkEventUseInBuild>false</PreLinkEventUseInBuild>
  <PostBuildEventUseInBuild>false</PostBuildEventUseInBuild>
</PropertyGroup>

(注意这里应该使用而不是。)
这种方法的优点有:
- 无需修改项目/解决方案文件 - 不需要更改环境(参见Custom.After.Microsoft.Common.Targets方法) - 适用于命令行和IDE构建,无需额外参数,只需将.vcxproj.user文件放在项目目录中 - 不会干扰源代码控制(Git等通常默认忽略.user文件)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接