Q:

DLL uploaded with TcmUploadAssembly.exe is missing classes

We have a Tridion 2013 SP1 installation, with workflow enabled in PROD but not in DEV or UAT.
I uploaded a new version of an existing DLL using TcmUploadAssembly.exe (verbose; to the right folder) and it looked successful. This was uploaded using the same .BAT that we used in DEV and UAT, except for changes in the server name and the folder ID. A new class TBB was created for the new class that was in the DLL. All of the previous classes showed as well.
We published a component that used that new class. It worked in DEV and UAT, but in PROD it gave an error that the class reference didn't exist (I'll post the specific error in an update).
I retrieved the DLL from the CMS, compared it to the compiled DLL, and that new class did not exist in the one retrieved from the CMS.
I uploaded the DLL a second time, using TcmUploadeAssembly.exe, and downloaded it again, and the class still didn't exist. This was after confirming the path in the .BAT file and all of the other parameters.
When I uploaded the compiled DLL using the CMS, and then downloaded it again, the class did exist.
Has anyone seen an issue where a class wouldn't exist (it looks like it was removed; even the file size was smaller) when uploaded with TcmUploadAssembly.exe, but would exist with uploading the DLL through the CMS?

A:

Believe me, the upload tool doesn't analyze your DLL and decide to drop classes at random :)
I can think of two possible explanations for this:

The tool didn't actually work and so your TBB wasn't ever updated. You should check the output to see if there are any errors (run it with /verbose for more details) and verify that you specified all of the right parameters.
The TBB was checked out at the time of the update and couldn't be checked back in. So when you used the TBB, it loaded the previously checked-in version instead of your updated one. Check the versioning history to see what happened (try it again if needed).

