Example #1
0
        public bool Compile(string filepath)
        {
            this.Name = Path.GetFileNameWithoutExtension(filepath);
            var code = File.ReadAllText(filepath);

            var codeProvider = new CSharpCodeProvider(new Dictionary<String, String> { { "CompilerVersion", "v3.5" } });
            var parameters = new CompilerParameters
                                 {
                                     GenerateInMemory = true,
                                     GenerateExecutable = false,
                                     IncludeDebugInformation = true
                                 };

            //Add references used in scripts
            parameters.ReferencedAssemblies.Add(Assembly.GetExecutingAssembly().Location); //Current application ('using milkshake;')
            parameters.ReferencedAssemblies.Add("System.dll");
            parameters.ReferencedAssemblies.Add("System.Core.dll");
            parameters.ReferencedAssemblies.Add("System.Data.dll");
            parameters.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll");
            parameters.ReferencedAssemblies.Add("System.Xml.dll");
            parameters.ReferencedAssemblies.Add("System.Xml.Linq.dll");
            parameters.ReferencedAssemblies.Add("Vanilla.World.dll");
            parameters.ReferencedAssemblies.Add("Vanilla.Core.dll");
            parameters.ReferencedAssemblies.Add("Vanilla.Database.World.dll");
            parameters.ReferencedAssemblies.Add("Vanilla.Database.Character.dll");

            var results = codeProvider.CompileAssemblyFromSource(parameters, code);
            if (results.Errors.HasErrors)
            {
                var error = "Error in script: " + this.Name;

                error = results.Errors.Cast<CompilerError>().Aggregate(error, (current, e) => current + ("\n" + e));

                Log.Print(LogType.Error, error);
                return false;
            }
            //Successful Compile
            Log.Print(LogType.Debug, "Script Loaded: " + this.Name);

            this.type = results.CompiledAssembly.GetTypes()[0];

            //Instansiate script class.
            try
            {
                if (this.type.BaseType == typeof(VanillaPlugin))
                {
                    this.instance = Activator.CreateInstance(this.type) as VanillaPlugin;
                }
                else
                {
                    Log.Print(LogType.Error, "Warning! " + this.Name + " isn't a VanillaPlugin");
                    return false;
                }

            }
            catch (Exception)
            {
                Log.Print(LogType.Error ,"Error instantiating " + this.Name);
                return false;
            }

            return true;
        }
Example #2
0
        public bool Compile(string filepath)
        {
            this.Name = Path.GetFileNameWithoutExtension(filepath);
            var code = File.ReadAllText(filepath);

            var codeProvider = new CSharpCodeProvider(new Dictionary <String, String> {
                { "CompilerVersion", "v3.5" }
            });
            var parameters = new CompilerParameters
            {
                GenerateInMemory        = true,
                GenerateExecutable      = false,
                IncludeDebugInformation = true
            };

            //Add references used in scripts
            parameters.ReferencedAssemblies.Add(Assembly.GetExecutingAssembly().Location); //Current application ('using milkshake;')
            parameters.ReferencedAssemblies.Add("System.dll");
            parameters.ReferencedAssemblies.Add("System.Core.dll");
            parameters.ReferencedAssemblies.Add("System.Data.dll");
            parameters.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll");
            parameters.ReferencedAssemblies.Add("System.Xml.dll");
            parameters.ReferencedAssemblies.Add("System.Xml.Linq.dll");
            parameters.ReferencedAssemblies.Add("Vanilla.World.dll");
            parameters.ReferencedAssemblies.Add("Vanilla.Core.dll");
            parameters.ReferencedAssemblies.Add("Vanilla.Database.World.dll");
            parameters.ReferencedAssemblies.Add("Vanilla.Database.Character.dll");

            var results = codeProvider.CompileAssemblyFromSource(parameters, code);

            if (results.Errors.HasErrors)
            {
                var error = "Error in script: " + this.Name;

                error = results.Errors.Cast <CompilerError>().Aggregate(error, (current, e) => current + ("\n" + e));

                Log.Print(LogType.Error, error);
                return(false);
            }
            //Successful Compile
            Log.Print(LogType.Debug, "Script Loaded: " + this.Name);

            this.type = results.CompiledAssembly.GetTypes()[0];

            //Instansiate script class.
            try
            {
                if (this.type.BaseType == typeof(VanillaPlugin))
                {
                    this.instance = Activator.CreateInstance(this.type) as VanillaPlugin;
                }
                else
                {
                    Log.Print(LogType.Error, "Warning! " + this.Name + " isn't a VanillaPlugin");
                    return(false);
                }
            }
            catch (Exception)
            {
                Log.Print(LogType.Error, "Error instantiating " + this.Name);
                return(false);
            }

            return(true);
        }