有没有办法暂时禁用构建前和构建后事件?
即在没有构建事件的情况下进行构建(这需要一些时间,但对于运行并不总是至关重要)
目前,我正在进行缩小和其他一些事情,但我并不总是需要这些。
禁用构建事件的最简单方法是传递空值:
msbuild your.sln /p:PreBuildEvent=;PostBuildEvent=
最小化之类的东西只对发布版本重要。所以你可以像这样跳过它:
if "$(ConfigurationName)" == "Debug" goto skip
; stuff here...
:skip
您还可以使用一些其他宏,单击“编辑”按钮和“宏>>”按钮即可查看它们。环境变量也可以测试,使用%varname%。但设置起来要困难得多。
我也玩了一点
msbuild foo.vcxproj /p:PreBuildEvent= /p:PostBuildEvent=
,但对我来说它不起作用,可能是因为我正在使用自定义道具文件。
我发现有效的是
/p:PostBuildEventUseInBuild=false
检查您的构建后事件设置。在“构建事件”选项卡上,将“运行构建后事件”组合框值更改为“当构建更新项目输出时”。仅当更新输出程序集时才会执行构建后事件。
或
使用 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 值应该是完整路径名。
此处尚未提及的另一个选项涉及修改
.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>
(注意此处应使用
<PropertyGroup>
而不是 <ItemDefinitionGroup>
。)
Custom.After.Microsoft.Common.Targets
方法).vcxproj.user
文件放在项目目录中.user
文件)