A silly mistake I sometimes make is to load the .asm file instead of the .hex and hence the PIC programmer gives this error message.
If this is not the case, have you done a hardware check of your programmer?
If you are using icprog, it has a hardware check and allows you to set the various signals so you can measure the voltages in the programmer.
Go to Settings/Hardware check. Tick Enable Data out, check that a tick appears in the Data in square. Tick Enable Clock, check the voltage on the PIC Clock pin, etc.
Also, do you have the right setting for your programmer. Some need inversion, some don't.
If you need more help, post a circuit of your programmer.
Len