title: Add Version to Existing DLLs Maintaining Backwards Compatability
body: <p>I have a product that I need to add dynamic versioning to our core level components, so that the main application can check for version inconsistencies before allowing certain things to execute. Some background:</p>
  
  <ul>
  <li>All components implement an interface that I have defined</li>
  <li>There is no base class that the components derive from, they all implement the root interface directly</li>
  <li>I can add a new <code>int Version</code> property and/or methods to the interface</li>
  <li>I need to maintain backwards compatibility with DLLs that already "in the wild" and deployed. If a DLL doesn't implement the version checking APIs (because its old), assume it will work properly</li>
  </ul>
  
  <p>So I was thinking of adding a <code>bool CheckVersion()</code> method to the interface, and then checking if that method exists before invoking it. If the method doesn't exist, then just don't invoke it.</p>
  
  <p>I don't like the idea of checking if  the method exists because it is expensive and clutters up the code (e.g., "Why is this weird invocation check necessary?")</p>
  
  <p>Anyone have any better ideas?</p>