VisualStudio:运行C++;项目生成后事件,即使项目是最新的 在VisualStudio(2008)中,即使项目是最新的,是否可以强制C++项目的后期生成事件运行?

VisualStudio:运行C++;项目生成后事件,即使项目是最新的 在VisualStudio(2008)中,即使项目是最新的,是否可以强制C++项目的后期生成事件运行?,c++,visual-studio,post-build-event,regsvr32,C++,Visual Studio,Post Build Event,Regsvr32,具体来说,我有一个项目,它构建了一个COM进程内服务器DLL。该项目有一个运行“regsvr32.exe$(TargetPath)”的后期生成步骤。这在“重建”上运行良好,但只有在对项目的源代码进行了更改后才能在“构建”上运行 如果我在不做任何更改的情况下进行“构建”,VisualStudio会简单地报告项目是最新的,并且不执行任何操作—构建后事件不会运行。在这种情况下,我有没有办法强迫活动进行?这是必要的,因为尽管DLL本身是最新的,但注册信息可能不是最新的。注册信息主要由.rgs文件中的内容

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


如果我在不做任何更改的情况下进行“构建”,VisualStudio会简单地报告项目是最新的,并且不执行任何操作—构建后事件不会运行。在这种情况下,我有没有办法强迫活动进行?这是必要的,因为尽管DLL本身是最新的,但注册信息可能不是最新的。

注册信息主要由
.rgs
文件中的内容决定。如果该文件发生更改,则将生成项目。我不知道还有什么其他的COM注册可以改变而不弄脏项目。您是否介意提供有关您的具体情况的更多详细信息?

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

使用此禁用的FastUpdateCheck

请参见一个示例:

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

如果存在C:\Projects\Copy\u Files\u To\u Instance.ps1(powershell-文件C:\Projects\Copy\u Files\u To\u Instance.ps1)
真的

所谓“COM注册信息可能不是最新的”,我的意思是注册表中的信息可能已更改,而不是.rgs文件中的信息。我希望生成后步骤将注册表中的信息还原为.rgs中的信息。我没有看到自定义生成步骤的任何输出设置。你在哪里找到输出?我使用这个一般概念在后构建目标中使用Exec来删除输出文件,就像这样哦,天哪,没有StackOverflow怎么知道?!在MSDN上,这里有一些关于构建步骤和构建事件执行顺序的附加信息:在我的例子中,我只是将“构建后事件”移动到“自定义构建步骤”,并在“输出”中指定了一个不存在的文件名。即使项目是最新的,这也会可靠地执行自定义生成步骤。尝试此操作后,仅此操作不起作用。与此环境相结合才有效。