Точка входа не найдена в сборке - PullRequest
0 голосов
/ 19 июня 2011

У меня есть приложение, в котором мне нужно создать AppDomain и загрузить сборку в него и выполнить методы сборки.

Вот мой код

public class CreateAppDomain
{
     public void CreateAppDom()
        {
        AppDomain domain = AppDomain.CreateDomain("myDomain");
        domain.ExecuteAssembly(@"C:\Visual Studio 2005\Projects\A1\A1\bin\Debug\A1.dll");
        domain.CreateInstanceFrom(@"C:\Visual Studio 2005\Projects\A1\A1\bin\Debug\A1.dll","A1.Navigate");
        }

}

Я выше код написанв файле класса с именем CreateAppDomain.cs

На моей странице Default.aspx я создал экземпляр вышеупомянутого класса и вызвал метод create. Вот код,

protected void Button1_Click(object sender, EventArgs e)
    {
        CreateAppDomain obj = new CreateAppDomain();
        obj.CreateAppDom();
        Response.Write("Application Domain Successfully created");
    }

при запуске которогоСтраница default.aspx Я получаю сообщение об ошибке:

Точка входа не найдена в сборке 'A1, Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = null'.

Может ли кто-нибудь объяснить мне значение вышеуказанной ошибки и ее решение.

Спасибо,

1 Ответ

6 голосов
/ 19 июня 2011
Метод

AppDomain.ExecuteAssembly() загружает сборку в указанный домен и затем выполняет ее стандартную точку входа, т.е. метод static void Main(string[] args).

Смотрите здесь для деталей.

Что вам нужно, это, вероятно, одна из перегрузок CreateInstanceAndUnwrap() метода

EDIT:

Я создал ConsoleApplication9, добавленный помимо ClassLibrary1. В ClassLibrary1 у меня есть Class1:

namespace ClassLibrary1
{
    public class Class1 : MarshalByRefObject
    {
        public void Go()
        {
            Console.WriteLine("My AppDomain's FriendlyName is: {0}", AppDomain.CurrentDomain.FriendlyName);
        }
    }
}

В ConsoleApplication9 это:

private static void Main(string[] args)
{
    Console.WriteLine("Trying to run method in current domain...");
    var inCurrentDomain = new Class1();
    inCurrentDomain.Go();

    Console.WriteLine("\nTrying to run method in remote domain...");
    string asmName = typeof(Class1).Assembly.FullName;
    string typeName = typeof (Class1).FullName;
    Console.WriteLine("Class1's assembly name is: {0}\nType name: {1}", asmName, typeName);

    var remoteDomain = AppDomain.CreateDomain("My remote domain");
    var remoteObject = (Class1)remoteDomain.CreateInstanceAndUnwrap(asmName, typeName);
    Console.WriteLine("\nRemote instance created. Running Go() method:");
    remoteObject.Go();
}

При запуске у меня есть:

Trying to run method in current domain...
My AppDomain's FriendlyName is: ConsoleApplication9.exe

Trying to run method in remote domain...
Class1's assembly name is: ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Type name: ClassLibrary1.Class1

Remote instance created. Running Go() method:
My AppDomain's FriendlyName is: My remote domain
...