title: Issue with InternalsVisibleTo attribute
body: <p>I have two assemblies, say <strong>Main</strong> and <strong>Sub</strong>, where <strong>Sub</strong> depends on <strong>Main</strong>. <strong>Main</strong> defines a few classes that have <code>protected internal virtual</code> members, that I want to override in <strong>Sub</strong>. I override these members as <code>protected override</code>.</p>
  
  <p>There is an unrelated class in <strong>Main</strong>, call it <em>Main.Shared</em>, that I want to use in <strong>Sub</strong>, but I don't want any other assemblies to see it. Here is how the situation looks:</p>
  
  <pre><code>//In assembly Main:
  public class Shared
  {
  }
  public class Parent
  {
      protected internal virtual void DoStuff()
      {
  
      }
  }
  //In assembly Sub:
  public class Child : Parent
  {
      protected override void DoStuff()
      {
          base.DoStuff();
      }
  } 
  </code></pre>
  
  <p>So I used the <code>InternalsVisibleTo</code> attribute as usual. However, after I decorate <strong>Main</strong> with this attribute, the code refuses to compile. The error message says that I must now override <code>DoStuff</code> as <code>protected internal override</code>, presumably because it now thinks <strong>Main</strong> and <strong>Sub</strong> are the same assembly (?)</p>
  
  <p>This is a big problem, since it means that I need to manually change every single override to protected internal, and there are many of them. Moreover, I might want to remove the attribute later, and then I would need to change everything back again.</p>
  
  <p>Is there any way I can avoid doing this? (Besides a complete redesign of the code base...)</p>
  
  <p>I'm also curious about why this happens at all. Is this behavior just some sort of blind spot, or is it supposed to work like this? </p>