50

在 Visual Studio (2008) 中,即使项目是最新的,是否可以强制 C++ 项目的构建后事件运行?

具体来说,我有一个构建 COM 进程内服务器 DLL 的项目。该项目有一个运行“regsvr32.exe $(TargetPath)”的构建后步骤。这在“重建”上运行良好,但只有在对项目的源代码进行了更改时才能在“构建”上运行。

如果我在不进行任何更改的情况下进行“构建”,Visual Studio 只会报告项目是最新的并且什么都不做 - 构建后事件不会运行。有什么方法可以强制事件在这种情况下运行?这是必要的,因为尽管 DLL 本身是最新的,但注册信息可能不是。

4

4 回答 4

61

您可以使用自定义构建步骤属性页面来设置要运行的批处理文件。如果未找到“输出”设置中指定的文件或已过期,则会运行此操作。只需在此处指定一些不存在的文件,自定义构建步骤将始终运行。即使您的项目是最新的,它也会运行,因为永远找不到输出文件。

于 2009-12-21T08:48:05.083 回答
8

使用此 DisableFastUpToDateCheck

看一个例子:

<PropertyGroup>
    <PostBuildEvent>IF  EXIST C:\Projects\Copy_Files_To_Instance.ps1 ( powershell -file C:\Projects\Copy_Files_To_Instance.ps1)</PostBuildEvent>
    <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>

于 2018-04-03T20:58:04.673 回答
0

注册信息很大程度上取决于.rgs文件中的内容。如果该文件发生更改,项目将被构建。我不确定在不使项目变脏的情况下如何更改 COM 注册。您介意提供有关您的特定情况的更多详细信息吗?

于 2009-12-21T01:13:06.383 回答
0

在 Visual Studio 2017(可能还有其他版本)中,对于 C# 项目(尚未根据 OP 的实际问题检查 C++ 项目)有一个“运行构建后事件:”选项,一个选项是“始终” ,即使没有任何变化,它也会运行 Post-Build,而不是简单地报告项目是最新的:

在此处输入图像描述

于 2019-05-03T14:02:59.993 回答