From here:-
A poor workaround to this would be to version all changes as new contracts but that would require an additional service and queue and existing conversations would not be able to benefit from the new message type.
I highly recomend support for an alter contract command but also add support for SSDT to issue an alter command instead of drop/create.
I highly reconsideration of this request. Or at a minimum: Add a check and error message to be raised from SSDT whenever any conversation exists that uses that service and/contract before dropping in a similar way that SSDT checks for existing data in a table before dropping said table. This would at least help raise awareness of this side-effect and would have prevented deployment headaches.