C # Динамическая загрузка / выгрузка DLL Redux (конечно, с помощью AppDomain)

Вы прочитали столько разных версий этого вопроса, сколько и в переполнении стека, а также каждую синюю ссылку на первой странице трех разных поисков в Google для учебных пособий, а также MSDN (что-то вроде мелкого за пределами выполнения сборок). Я могу думать только о своих попытках заставить Дао работать как хороший тестовый пример, но поверьте мне, ямы пробовали с простой строкой return, double, функцией с параметрами тоже. Какова бы ни была моя проблема, это нет Тао.

В основном я хочу создатьtestLibraryDomain.CreateInstance() моего класса Draw в пространстве имен 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 );

Я точно знаю, что:

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
        }
    }
}

действительно меняет цвет ручки. Это работает, когда я даю этоstatic void Main( string args[] ) точка входа и я звонюtestLibraryDomain.ExecuteAssembly( thePluginFilePath ) Работала ли прямая ExecuteAssembly, меня беспокоило, так как я не был уверен, что GL Calls превратится в "верхний уровень" AppDomain'с контекстом OpenGL. Он даже позволяет мне перезаписать сборку и изменить цвет пера во второй раз. К сожалению, предоставление ему исполняемой точки входа означает, что всплывающая консоль прерывает меня, а затем уходит. Это также работает, когда я просто даю ссылку в Проект и создаю регулярнуюGLPlugin.DrawingTool tool = new GLPlugin.DrawingControl()или даже создаваяsomeAssembly = Assembly.LoadFrom( thePluginFilePath ) (что, конечно, и, к сожалению, блокирует сборку, предотвращая замену / перекомпиляцию).

При использовании любого из различных методов япробовал, всегда получаюданное имя сборки или его кодовая база недействительны. " Обещаю, это действительно. Что-то, как яЯ пытаюсь загрузить это не так.

Я знаю одном отсутствует правильная настройка дляtestLibraryDomain.CreateInstance( string assemblyName , string typeName);

Насколько я могу судить, аргумент assemblyName не является путем к файлу сборки. Это пространство имен или даже просто имя сборки, то есть:GLPlugin? Если это так, где я могу сослаться на фактический файл? SomeAppDomain.LoadFrom (someFilename) не существует, хотя было бы чертовски удобно, если бы они были. Кроме того, какого черта это тип, и строка typeName в этом? Я нене хочу вставлять"Object" здесь я, так как не создает тип, кроме экземпляра объекта? Я'мы также пыталисьCreateInstanceAndUnwrap( ... , ... ) с таким же отсутствием фундаментального понимания AppDomain. Обычно я могу перебирать уроки и заставлять вещи работать, хотя я часто нене понимаю "Зачем?"... здесь не так. Обычно для меня полезно посмотреть шесть различных учебных пособий ... не здесь снова, а потому, что каждый использует фундаментальный (или, как кажется, так) подход.

Поэтому, пожалуйста, ELI5 ... Я хочу загрузить экземпляр класса из dll в отдельный домен приложений, возможно, запустить несколько функций и выгрузить его. В конце концов создайте список этих функций как List, удаляя / обновляя при необходимости ... I 'я бы тоже хотел иметь возможность передавать им аргументы, но это будет шаг 2. Согласно StackOverflow, я должен узнать оserializable который я отложу на другой день. (Я представляю тебясмогу понять из моего примера, что яя пытаюсь сделать.)

Ответы на вопрос(1)

Ваш ответ на вопрос