public static int Main()
    {
        string original_domain = AppDomain.CurrentDomain.FriendlyName;

        AppDomain ad = AppDomain.CreateDomain("subdomain");

        try {
            TestOutput remoteOutput = (TestOutput)ad.CreateInstanceAndUnwrap(
                typeof(TestOutput).Assembly.FullName,
                "TestOutput");
            remoteOutput.ThrowUnserializable();
        } catch (SerializationException) {
            Console.WriteLine("Caught serialization exception");
        } catch (Exception) {
            Console.WriteLine("Caught other exception");
            Environment.Exit(1);
        } finally {
            Console.WriteLine("Finally in domain {0}", AppDomain.CurrentDomain.FriendlyName);
            if (original_domain != AppDomain.CurrentDomain.FriendlyName)
            {
                Environment.Exit(2);
            }
            AppDomain.Unload(ad);
        }

        Console.WriteLine("All OK");
        return(0);
    }