When using a custom workflow dll in CRM, make sure to register it with the same GUIDs on production as you do on your dev CRM server. You can do this easily by using export/import from the plugin registration tool.
When you make a workflow, anything that uses a step from the custom workflow will end up referring to it by GUID. So if the guids don’t match for the dll, you can’t import/export workflows between the environments. And it’s not an easy fix by editing guids in the customization export file, because workflows are serialized inside this file.
If you find out about the problem early, you can unregister and reregister the dll with the right GUID. If you find out about the problem late, after someone has already developed workflows separately in both environments, you may need to delete anything that uses data from the custom dll and recreate those workflow steps.
It shows up as an error message of “This workflow contains errors and cannot be published”, and “This workflow includes an invalid reference”. (The invalid reference message is a generic there-is-a-guid-that-doesnt-match error, it could also be referring to a record like a system user.)