You must ensure ALL apps that interact with Hangfire have the necessary dlls/assemblies to deserialize Jobs.
e.g. if your Hangfire dashboard is running from a different app from your Hangfire server then ensure they all have the needed dlls with the Job methods.
Another case I hit is where we had multiple servers with different versions of our software running using the same Hangfire database. Since the Job definition from one version used an assembly not available in our other version we got this System.IO.FileNotFoundException: Could not load file or assembly ...
exception.
Even though we used queues to separate the jobs and ensure a server only ran jobs it should run ... if a job fails the first execution attempt then other Hangfire servers will try to look at the job and decide whether they should execute it. The 'queue' isn't an intrinsic part of a Job's definition so servers will still inspect jobs that are supposed to be processed by a different queue, and then if they don't have the right assemblies they can't deserialize the Job ... BOOM.
Handy references for this queue problem here and here and here.