Carregamento Dinâmico / Descarregamento de DLLs Redux (usando AppDomain, é claro)

Eu li tantas versões diferentes dessa pergunta quanto no Stack Overflow, bem como em todos os links azuis na primeira página de três pesquisas diferentes do Google para tutoriais, bem como no MSDN (que é um pouco superficial além da execução de assemblies) . Eu só consigo pensar em meus esforços para fazer o Tao funcionar como um bom teste, mas, acredite, eu tentei com um simples retorno de string, um double, uma função com parâmetros também. Seja qual for o meu problema, não é Tao.

Basicamente eu quero criar umtestLibraryDomain.CreateInstance() da minha classe Draw no namespace do GLPlugin.

        if( usePlugin )
        {
                AppDomain testLibraryDomain = AppDomain.CreateDomain( "TestGLDomain2" );

                //What the heck goes here so that I can simply call
                //the default constructor and maybe a function or two?

                AppDomain.Unload( testLibraryDomain );
        }
        Gl.glBegin( Gl.GL_TRIANGLES );

Eu sei de fato que:

namespace GLPlugin
{
    public class DrawingControl : MarshalByRefObject
    {
        public DrawingControl()
        {
            Gl.glColor3f( 1.0f , 0.0f , 0.0f );

            //this is a test to make sure it passes
            //to the GL Rendering context... success
        }
    }
}

de fato muda a cor da caneta. Funciona quando eu dou umstatic void Main( string args[] ) ponto de entrada e eu chamotestLibraryDomain.ExecuteAssembly( thePluginFilePath ) Se um ExecuteAssembly direto funcionaria ou não, isso me preocupou, já que eu não estava certo de que as Chamadas GL o transformariam no contexto OpenGL do AppDomain de "nível superior". Ele ainda me permite substituir a montagem e alterar a cor da caneta uma segunda vez. Infelizmente, dar a ele um ponto de entrada executável significa que um console pop-up me interrompe e desaparece. Ele também funciona quando eu simplesmente dou a ele uma referência no Projeto eGLPlugin.DrawingTool tool = new GLPlugin.DrawingControl(), ou até mesmo criar umsomeAssembly = Assembly.LoadFrom( thePluginFilePath ) (que, claro e infelizmente, bloqueia a montagem, impedindo a substituição / recompilação).

Ao usar qualquer um dos vários métodos que eu tentei, sempre recebo "o nome do assembly ou sua base de código inválida". Eu prometo, é válido. Algo no jeito que estou tentando carregar não é.

Uma coisa que eu sei que estou faltando é uma configuração correta para otestLibraryDomain.CreateInstance( string assemblyName , string typeName);

Tanto quanto eu posso dizer, o argumento assemblyName não é o caminho de arquivo para o arquivo de montagem. É o namespace, ou apenas o nome do assembly, ou seja:GLPlugin? Em caso afirmativo, onde eu faço referência ao arquivo real? Não há someAppDomain.LoadFrom (someFilename), embora seria útil se houvesse. Além disso, o que diabos é o Type, e string typeName nisso? Eu não quero colocar"Object" aqui eu, já que não está criando um tipo diferente de uma instância de um objeto? Eu também tenteiCreateInstanceAndUnwrap( ... , ... ) com a mesma falta de uma compreensão fundamental do AppDomain. Normalmente eu posso passar por tutoriais e fazer as coisas funcionarem, mesmo que eu não entenda o "Por quê?" ... não tão aqui. Normalmente, é útil procurar seis tutoriais diferentes ... não aqui novamente, mas porque todos adotam uma abordagem fundamental (ou o que parece ser).

Então, por favor, ELI5 ... Eu quero carregar uma instância de uma classe de uma dll em um AppDomain separado, talvez executar algumas funções e descarregá-lo. Eventualmente crie uma lista dessas funções como List, removendo / atualizando conforme necessário ... Eu adoraria poder passar argumentos para elas também, mas essa será a etapa 2. De acordo com o StackOverflow, eu tenho que aprender sobreserializable que vou adiar por mais um dia. (Eu imagino que você será capaz de entender do meu exemplo o que estou tentando fazer.)

questionAnswers(1)

yourAnswerToTheQuestion