Visual Studio:如何仅在必要时运行自定义生成步骤

mac*_*nir 5 msbuild custom-build-step vcproj visual-studio-2012

我正在使用“ 自定义构建”步骤将C ++项目的构建DLL(即$(TargetPath))复制到磁盘上的其他位置。

我已将Output“自定义生成步骤”的设置为目标DLL路径,并将其设置Additional Dependencies$(TargetPath)-我要复制的文件,希望VS仅在源DLL比目标DLL更新时才运行该步骤。

但是,每次我构建项目时,VS都会运行自定义的构建步骤-因此似乎无法告诉您不需要执行复制(源DLL $(TargetPath)并未更改)。我必须将步骤配置错误。

哪些设置可以使我获得想要的行为(即,如果VS构建成功并且自定义构建步骤成功,则VS会将其视为最新项目)?

在VS Output窗口中,我看到这一行,这似乎暗示Visual Studio将vcxproj作为触发构建步骤的文件。我希望它使用$(TargetPath)

Input file "MyProject.vcxproj" is newer than output file "c:\custom\build\step\copies\the\dll\here.dll".
Run Code Online (Sandbox Code Playgroud)

(PS:我应该补充,我最初使用的是Post Build Step,但是如果失败,VS会认为该项目已成功构建,并且在第二次构建时不再运行该项目)

小智 0

我认为你想要的是增量建设。

这是一个快速指南:http ://msdn.microsoft.com/en-us/library/ms171483.aspx

基础知识是您需要向目标提供输入,以便 MSBuild 可以将输入映射到输出,并在输出与输入更新/相同的情况下跳过目标。