So... you have your application ready, and you want to deploy it. Which DLLs do you deploy? This is one of those questions that can be difficult if you let it. My job is to not let that happen. So I'll break it down into one rule:
|Any assemblies you reference in your project need to be available to the executing application at runtime.|
This rule applies to every piece of software in the universe. But let's take a closer look at what this means for the various types of Vault customizations....
You are building an EXE
If your project output is an EXE, then it needs access to everything referenced in the project. The simplest way to do this is to just put the referenced DLLs in the same folder as your EXE. Visual Studio does this automatically, so you can just package up the program output and call it a day.
You are building a Vault Explorer extension
In the case of a custom command or tab view, you want to deploy everything that is referenced in your project that Vault Explorer doesn't already have access to.
If you look in your Vault Explorer folder (the Explorer folder under your client install location), you'll notice it already has some of the SDK DLLs, such as Autodesk.Connectivity.WebServices.dll. However, not all the SDK DLLs are there, WebServicesTools for example. So, you need to deploy the assemblies that are referenced by your project that are not in the Explorer folder. When you deploy, the DLLs should be in the same folder as your extension DLL.
You are building a Job Processor extension
The rules are exactly the same as when building a Vault Explorer extension. In fact, JobProcessor.exe is in the same folder as Vault Explorer, so list of available DLLs is also the same.
You are building a Web Service (event handler) extension
In this case, you don't know which app you are running in. There are only 2 DLLs guaranteed to be available to the hosting app: Autodesk.Connectivity.WebServices.dll and Autodesk.Connectivity.Extensibility.Framework.dll. All other references should be deployed in the same folder as your extension.
If you deploy a DLL that is already in the application's folder, you won't hurt anything. .NET loads first from the folder that the application is running in. So your deployed DLL will never be used in this case.
If multiple extensions deploy the same DLL, the only one of them will be loaded at runtime. There is no way to know which one that will be ahead of time.