/// <summary>
        /// Generates the corresponding moddesc.ini text for this mod
        /// </summary>
        /// <returns></returns>
        public string SerializeModdesc()
        {
            IniData moddessc = new IniData();

            moddessc[@"ModManager"][@"cmmver"] = ModDescTargetVersion.ToString();
            if (MinimumSupportedBuild > 0)
            {
                moddessc[@"ModManager"][@"minbuild"] = MinimumSupportedBuild.ToString();
            }

            moddessc[@"ModInfo"][@"modname"] = ModName;
            moddessc[@"ModInfo"][@"game"]    = Game.ToString();
            moddessc[@"ModInfo"][@"moddev"]  = ModDeveloper;
            moddessc[@"ModInfo"][@"modver"]  = ModVersionString;
            moddessc[@"ModInfo"][@"modsite"] = ModWebsite;
            moddessc[@"ModInfo"][@"moddesc"] = Utilities.ConvertNewlineToBr(ModDescription);

            foreach (var job in InstallationJobs)
            {
                job.Serialize(moddessc);
            }


            return(moddessc.ToString());
        }
        public void BuildParameterMap(Mod _)
        {
            ParameterMap.ClearEx();

            var parameterDictionary = new Dictionary <string, object>()
            {
                // ModManager
                { @"cmmver", ModDescTargetVersion },
                { @"minbuild", MinimumSupportedBuild > 102 ? MinimumSupportedBuild.ToString() : null },
            };

            ParameterMap.AddRange(MDParameter.MapIntoParameterMap(parameterDictionary, @"ModManager"));

            // ModInfo
            parameterDictionary = new Dictionary <string, object>()
            {
                { @"game", Game },
                { @"modname", ModName },
                { @"moddesc", ModDescription },
                { @"modver", ParsedModVersion },
                { @"moddev", ModDeveloper },
                { @"modsite", ModWebsite == Mod.DefaultWebsite ? "" : ModWebsite },
                { @"updatecode", ModClassicUpdateCode > 0 ? ModClassicUpdateCode.ToString() : null },
                { @"nexuscode", NexusModID > 0 ? NexusModID.ToString() : null },
                { @"requireddlc", RequiredDLC },
                { @"bannerimagename", BannerImageName },
            };


            // NON PUBLIC OPTIONS
            if (RequiresAMD)
            {
                parameterDictionary[@"amdprocessoronly"] = RequiresAMD;
            }

            if (!string.IsNullOrWhiteSpace(PostInstallToolLaunch))
            {
                // This is a non-public property but is used by one mod
                parameterDictionary[@"postinstalltool"] = PostInstallToolLaunch;
            }
            // END NON PUBLIC OPTIONS

            if (Game > MEGame.ME1)
            {
                // This flag only makes a difference for ME2/3
                parameterDictionary[@"prefercompressed"] = PreferCompressed ? @"True" : null;
            }

            ParameterMap.AddRange(MDParameter.MapIntoParameterMap(parameterDictionary, @"ModInfo"));

            // UPDATES
            parameterDictionary = new Dictionary <string, object>()
            {
                { @"serverfolder", UpdaterServiceServerFolder },
                { @"blacklistedfiles", UpdaterServiceBlacklistedFiles },
                { @"additionaldeploymentfolders", AdditionalDeploymentFolders },
                { @"additionaldeploymentfiles", AdditionalDeploymentFiles },
            };

            ParameterMap.AddRange(MDParameter.MapIntoParameterMap(parameterDictionary, @"UPDATES"));
        }