Both PostBuildEvent and AfterBuild are MSBuild targets. The difference between the two is the conditions around when they are invoked
- AfterBuild: This runs as the last action in the Build target and does so irrespective of whether or not a build succeeds. It runs after PostBuildEvent (if it runs at all)
- PostBuildEvent: This runs conditionally after a build completes. When it runs is very configurable but in general it will only run if a build successfully completes and produces new output.