title: Object name inside of referenced .dll changed blowing up application
body: <p>I would appreciate it if someone would explain to me how .NET references work when a .dll is compiled.</p>
  
  <p>I have two .dll-s, my primary application.dll references my services.dll.  The purpose of the services.dll is to provide a decoupled layer for communication with third party services so that changes to the integrations do not affect the application directly.</p>
  
  <p>To achieve this decoupling I have inherited the services primary object exposing and using the new object in the main application:</p>
  
  <pre><code>public class CustomClient : ServiceClient_v1
  {
    public CustomClient(binding, address) : base (binding, address) {}
  }
  </code></pre>
  
  <p>However, I am finding that when ServiceClient_v1 gets updated to ServiceClient_v2 and I try and just update the services.dll then my application.dll blows up saying:</p>
  
  <blockquote>
    <p>Could not load type "ServiceClient_v1" from assembly services.dll</p>
  </blockquote>
  
  <p>So it is still hanging onto a direct reference to that other object that I am trying to hide.  I assume this is by design and simply something to do with compilation that I do not understand.</p>
  
  <p>Is there a way to achieve what I want?  And why is my method not working?</p>