The other answers to this question tend to assume you are not using VisualStudio but MSBuild directly or have an existing project for which you can add a custom build step or a build event (I have found build event type of solutions error prone because they will not always copy the files when you need them copied).
If you want a VisualStudio project that only does a copy, you can do this with a stock VisualStudio with a Makefile project.
The slightly misnamed Makefile project can do anything you can do from the command line. Obviously this means you can create a Makefile project that only copies files. In a Makefile project's Properties⇒Configuration Properties⇒NMake section are fields for Build, Rebuild, and Clean actions. These can be populated with plain old batch file commands. On every build, VisualStudio will create a temporary batch file from the proper field and execute it with cmd. Warning you will get the 32-bit cmd interpreter on 64-bit machines so you will need to use the magical sysnative directory if you want access 64-bit windows commands or DLLs (I'm not sure if this is documented anywhere so it may not always be the case - your batch scripts should be robust against the bit-ness of cmd changing.
Example batch code requiring 64-bit system files without knowing beforehand what cmd or OS (32-bit or 64-bit) will run the code:
if /i "%programfiles%"=="%programfiles(x86)%" if /i not "%programfiles%"=="%programw6432%" (
REM 32 bit cmd on 64-bit computer
REM Use the 'sysnative' fake directory to get to 64-bit system32 files
) else (
if /i not "%programfiles%"=="%programfiles(x86)%" if /i "%programfiles%"=="%programw6432%" (
REM 64 bit cmd on 64-bit computer
REM Use the 'system32' directory to get to 64-bit system32 files
) else (
echo "Cannot do 64-bit on 32-bit computer"
copy foobar
)
)
(thie "copy foobar" line above will fail causing the build to fail.)
Note, VisualStudio (and MSBuild) will always run a Makefile project - it does not check the timestamp on the output file but instead punts that job to what it expects to be some other build tool (nmake, cmake, make, ant, maven, etc.). Since, in this case there is just a simple copy command and not some program checking whether or not to perform the copy, the copy occurs on every build.
VisualStudio always running makefile projects also means that every time you press F5 to debug your project, VisualStudio will annoy you with a poorly worded pop up a dialog box (if you haven't told it not to) telling you that you your project is out of date and that you must build it again. If you tell VisualStudio not to display the dialog, it will just perform the copy without asking before running the executable.