예제 #1
0
        void GatherModuleFiles()
        {
            List <string> SourceFiles = new List <string>();

            string[] files = Directory.GetFiles(SourceDir, "*" + BuildCsString + ".cs", SearchOption.AllDirectories);
            SourceFiles.AddRange(files);
            FindPlatfromInterface(ref SourceFiles);
            const string ModuleSufix = "Module";

            foreach (string s in files)
            {
                string filename = Path.GetFileNameWithoutExtension(s);
                string outi     = filename.Replace(BuildCsString, "");
                ModuleNames.Add(outi);
            }
            string[] Targetfiles = Directory.GetFiles(SourceDir, "*" + TargetCsString + ".cs", SearchOption.AllDirectories);
            SourceFiles.AddRange(Targetfiles);

            try
            {
                CompiledAssembly = CompileAssembly("BuildCsFiles.dll", SourceFiles);
            }
            catch (Exception E)
            {
                Console.WriteLine("Compile Failed with error " + E.Message);
                Console.Read();
                Environment.Exit(1);
            }
            AppDomain.CurrentDomain.Load(CompiledAssembly.GetName());
            SetupPlatfromInterface();

            if (TargetRulesName.Length == 0)
            {
                TargetRulesName = DefaultTargetRulesName;
            }

            Type RulesObjectType = CompiledAssembly.GetType(TargetRulesName);

            if (RulesObjectType == null)
            {
                Console.WriteLine("Failed to File Target Rules \"" + TargetRulesName + "\" falling back to default");
                TargetRulesName = DefaultTargetRulesName;
                RulesObjectType = CompiledAssembly.GetType(TargetRulesName);
            }
            if (RulesObjectType != null)
            {
                TargetRulesObject = (TargetRules)FormatterServices.GetUninitializedObject(RulesObjectType);
                ConstructorInfo Constructor = RulesObjectType.GetConstructor(Type.EmptyTypes);
                if (Constructor != null)
                {
                    Constructor.Invoke(TargetRulesObject, new object[] { });
                }
                TargetRulesObject.Resolve();
            }
            Console.WriteLine("Targeting Windows 10 Version " + TargetRulesObject.WindowTenVersionTarget + " (" + TargetRulesObject.GetWinSDKVer() + ")");
            foreach (string s in TargetRulesObject.ModuleExcludeList)
            {
                if (ModuleNames.Contains(s))
                {
                    ModuleNames.Remove(s);
                    Console.WriteLine("Excluded Module " + s);
                }
            }
            const string ModuleEnd = "Module";

            for (int i = 0; i < ModuleNames.Count; i++)
            {
                if (ModuleNames[i].EndsWith(ModuleEnd))
                {
                    ModuleNames[i] = ModuleNames[i].Remove(ModuleNames[i].Length - ModuleEnd.Length, ModuleEnd.Length);
                }
            }
            InitObjectsOfType(ModuleNames, ref NonCoreModuleObjects, CompiledAssembly, ModuleSufix);
            ALLModules.AddRange(NonCoreModuleObjects);
        }
예제 #2
0
 public ModuleDef(TargetRules Rules)
 {
 }