[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/jimanx2/pythonnet/master/src/console/pythonconsole.cs [Back]  [Original]

using System;
using System.Reflection;
using System.Collections.Generic;
using Python.Runtime;

namespace Python.Runtime
{
    public sealed class PythonConsole
    {
        private PythonConsole()
        {
        }

        [STAThread]
        public static int Main(string[] args)
        {
            // reference the static assemblyLoader to stop it being optimized away
            AssemblyLoader a = assemblyLoader;

            string[] cmd = Environment.GetCommandLineArgs();
            PythonEngine.Initialize();

            int i = Runtime.Py_Main(cmd.Length, cmd);
            PythonEngine.Shutdown();

            return i;
        }

        // Register a callback function to load embedded assmeblies.
        // (Python.Runtime.dll is included as a resource)
        private sealed class AssemblyLoader
        {
            Dictionary loadedAssemblies;

            public AssemblyLoader()
            {
                loadedAssemblies = new Dictionary();

                AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
                {
                    string shortName = args.Name.Split(',')[0];
                    String resourceName = shortName + ".dll";

                    if (loadedAssemblies.ContainsKey(resourceName))
                    {
                        return loadedAssemblies[resourceName];
                    }

                    // looks for the assembly from the resources and load it
                    using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
                    {
                        if (stream != null)
                        {
                            Byte[] assemblyData = new Byte[stream.Length];
                            stream.Read(assemblyData, 0, assemblyData.Length);
                            Assembly assembly = Assembly.Load(assemblyData);
                            loadedAssemblies[resourceName] = assembly;
                            return assembly;
                        }
                    }

                    return null;
                };
            }
        };

        private static AssemblyLoader assemblyLoader = new AssemblyLoader();
    };
}

Web Proxy Viewer  |  New URL  |  Original Page