public IEnumerable<Change<string>> GetAllPublicContractChangesBetween(AssemblyDefinition oldAssembly, AssemblyDefinition newAssembly)
 {
     var ret = new List<Change<string>>();
     try
     {
         if (newAssembly.ContainsAttribute("InternalsVisibleToAttribute"))
         {
             ret.Add(new Change<string>(ChangeType.Modify, "Internals Are Visible, rebuild!"));
         };
         var oldCache = AssemblyPubliclyVisibleStuffMapBuilder.BuildPublicOnlyFor(oldAssembly);
         var newCache = AssemblyPubliclyVisibleStuffMapBuilder.BuildPublicOnlyFor(newAssembly);
         var differences = MapKeyDifferenceFinder.GetChangesBetween(oldCache, newCache);
         foreach (var c in differences)
         {
             ret.Add(new Change<string>(c.ChangeType, c.ItemChanged.FullName));
         }
     }
     catch (Exception ex)
     {
         ret.Add(new Change<string>(ChangeType.Modify, "An exception occured finding changes" + ex));
     }
     return ret;
 }