Jak utworzyć domenę aplikacji i uruchomić w niej aplikację?

Muszę utworzyć własną domenę aplikacji, aby obejść błąd w domyślnym zachowaniu środowiska uruchomieniowego.NET . Żaden przykładowy kod, który widziałem online, nie jest pomocny, ponieważ Nie wiem, gdzie go umieścić, ani co musi zastąpić w mojej metodzie Main().

Author: Peter Mortensen, 2010-04-15

2 answers

Należy prawdopodobnie zauważyć, że tworzenie AppDomains tylko po to, aby obejść coś, co można naprawić za pomocą stałego ciągu jest prawdopodobnie złym sposobem. Jeśli próbujesz zrobić to samo, co link, który zauważyłeś, możesz to zrobić: {]}

var configFile = Assembly.GetExecutingAssembly().Location + ".config";
if (!File.Exists(configFile))
    throw new Exception("do your worst!");

Punkt wejścia rekurencyjnego: o)

static void Main(string[] args)
{
    if (AppDomain.CurrentDomain.IsDefaultAppDomain())
    {
        Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);

        var currentAssembly = Assembly.GetExecutingAssembly();
        var otherDomain = AppDomain.CreateDomain("other domain");
        var ret = otherDomain.ExecuteAssemblyByName(currentAssembly.FullName, args);

        Environment.ExitCode = ret;
        return;
    }

    Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);
    Console.WriteLine("Hello");
}

Szybka próbka przy użyciu niestatycznego wtórnego punktu wejścia i MarshalByRefObject...

class Program
{
    static AppDomain otherDomain;

    static void Main(string[] args)
    {
        otherDomain = AppDomain.CreateDomain("other domain");

        var otherType = typeof(OtherProgram);
        var obj = otherDomain.CreateInstanceAndUnwrap(
                                 otherType.Assembly.FullName,
                                 otherType.FullName) as OtherProgram;

        args = new[] { "hello", "world" };
        Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);
        obj.Main(args);
    }
}

public class OtherProgram : MarshalByRefObject
{
    public void Main(string[] args)
    {
        Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);
        foreach (var item in args)
            Console.WriteLine(item);
    }
}
 38
Author: Matthew Whited,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-03 20:12:37

Musisz:

1) Utwórz instancję obiektu AppDomainSetup i uzupełnij ją informacjami o konfiguracji dla Twojej domeny

2) Utwórz nową domenę za pomocą AppDomain.Stworzona metoda. Instancja AppDomainSetup z parametrami konfiguracyjnymi jest przekazywana do metody CreateDomain.

3) Utwórz instancję swojego obiektu w nowej domenie za pomocą metody CreateInstanceAndUnwrap na obiekcie domain. Ta metoda przyjmuje nazwę typową obiektu, który chcesz utworzyć i zwrócić remoting proxy, którego możesz użyć w domenie głównej yuor do komunikacji z obiektem utworzonym w nowym

Po wykonaniu tych 3 kroków możesz wywołać metody w innej domenie przez proxy. Możesz również rozładować domenę po zakończeniu i ponownie ją załadować.

Ten Temat W pomocy MSDN zawiera dość szczegółowy przykład tego, czego potrzebujesz

 6
Author: mfeingold,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-15 19:57:27