Split an Assembly Across Multiple Files
The 2005 version of C# introduced the concept of Friend assemblies; the feature was added to VB in 2008. It enables you to combine assemblies in terms of what constitutes internal access. That is, you can define internal members but have them be accessible by external assemblies. This capability is useful if you intend to split an assembly across physical files but still want those assemblies to be accessible to one another as if they were internal.
Friend assembles do not allow for access to private members.
You use the attribute class InternalsVisibleToAttribute to mark an assembly as exposing its internal members as friends to another assembly. This attribute is applied at the assembly level. ...