InternalsVisibleTo

アクセス修飾子としてinternalを付けると同一アセンブリからしかアクセス出来なくなります。しかし、ユニットテストとかからは例外的に呼び出したいこともあります。そんな時にInternalsVisibleTo属性が使えるみたいです。

using System;
using System.Runtime.CompilerServices;

[assembly : InternalsVisibleTo("App")]
internal class InternalLib {
    internal InternalLib() {}
    internal void InternalMethod() {}
}

とかすると、アセンブリ「App」からはinternalなクラスやメソッドにアクセスできるようなります。ただし、コンパイルするときは、

$ csc /r:InternalLib.dll /out:App.exe App.cs

のように出力アセンブリ名を明示する必要があります。