I would imagine this is possible using reflection.
For example: To invoke an internal method on a public class:
var myPublicClass = new PublicClass;
MethodInfo mInfo = typeof(PublicClass).GetMethod("InternalMethodName", BindingFlags.Instance | BindingFlags.NonPublic);
var result = mInfo.Invoke(myPublicCLass, null) // (replace null with an array of parameters if necessary)
Or to create in instance of a internal class:
MethodInfo mInfo= Type.GetType(assemblyQualifiedName).GetConstructor(
BindingFlags.NonPublic | BindingFlags.Instance,
null,
new[] { typeof(string) },
null
);
object myInstance = mInfo.Invoke(new[] { "constructorArgument" });
Edit: Internal static method on internal static class:
MethodInfo mInfo = Type.GetType(assemblyQualifiedName).GetMethod("InternalMethodName", BindingFlags.Static| BindingFlags.NonPublic);
var result = mInfo.Invoke(null, null) // (replace 2nd null with an array of parameters if necessary)