title: What's going on with assembly and class versions compatibility?
body: <p>I'm struggling with proper dependencies versioning on releases. I've read in some articles that every change to AssemblyVersion in a library will cause the need of rebuilding all assemblies referencing this library. If it's true I need to be super careful when designing release cycles of dependent assemblies, right?</p>
  
  <p>I wanted to verify the thesis by myself and... well, I noticed it is not the truth at all.</p>
  
  <p>I made a console app which referenced dep1.dll (assembly version 1.0.0.0) and built it. Then I changed dep1.dll to version 2.0.0.0, built it and swapped it with version 1.0.0.0. When running console application I expected error <em>"The assembly dep1.dll with version 1.0.0.0 couldn't be found"</em>. And you know what? Nothing special happened, the app used the library like it was targetting that version since the beginning.</p>
  
  <p>ConsoleApp1/Program.cs</p>
  
  <pre><code>using dep1;
  using System;
  
  namespace ConsoleApp1
  {
      class Program
      {
          static void Main(string[] args)
          {
              var a = new Class1();
              a.Prop1 = "asdf";
              Console.WriteLine(a.Prop1);
          }
      }
  
      public class Implementation : Interface1
      {
          public int Super { get =&gt; throw new NotImplementedException(); set =&gt; throw new NotImplementedException(); }
      }
  }
  </code></pre>
  
  <p>dep1/Class1.cs</p>
  
  <pre><code>namespace dep1
  {
      public class Class1
      {
          public string Prop1 { get; set; }
      }
  
      public interface Interface1
      {
          int Super { get; set; }
      }
  }
  </code></pre>
  
  <p>As you can see, it's the same with interfaces.</p>
  
  <p>Could you please explain why my test didn't work? This, other SO answers (<a href="https://stackoverflow.com/a/65062/2811109">1</a>) and article by haacked <a href="https://haacked.com/archive/2008/02/21/versioning-issues-with-abstract-base-classes-and-interfaces.aspx/" rel="nofollow noreferrer">on versioning interfaces</a> really confused me.</p>