private async Task PublishConnectionStrings(WebSiteManagementClient webAppClient, TargetSite targetSite,
                                                    ConnectionStringSetting[] newConStrings)
        {
            var conStrings = await AppSettingsManagement.GetConnectionStringsAsync(webAppClient, targetSite);

            foreach (var connectionStringSetting in newConStrings)
            {
                conStrings.Properties[connectionStringSetting.Name] =
                    new ConnStringValueTypePair(connectionStringSetting.Value, connectionStringSetting.Type);
            }

            await webAppClient.WebApps.UpdateConnectionStringsAsync(targetSite, conStrings);
        }
        private async Task PublishAppSettings(WebSiteManagementClient webAppClient, TargetSite targetSite,
                                              AppSetting[] appSettings, string authToken)
        {
            var settingsDict = new StringDictionary
            {
                Properties = new Dictionary <string, string>()
            };

            var existingSlotSettings = new List <string>();

            // for each app setting found on the web app (existing app setting) update it value and add if is a slot setting, add
            foreach (var(name, value, SlotSetting) in (await AppSettingsManagement.GetAppSettingsAsync(webAppClient,
                                                                                                       authToken, targetSite)).ToList())
            {
                settingsDict.Properties[name] = value;

                if (SlotSetting)
                {
                    existingSlotSettings.Add(name);
                }
            }

            // for each app setting defined by the user
            foreach (var setting in appSettings)
            {
                // add/update the settings value
                settingsDict.Properties[setting.Name] = setting.Value;

                // if the user indicates a settings should no longer be a slot setting
                if (existingSlotSettings.Contains(setting.Name) && !setting.SlotSetting)
                {
                    Log.Verbose($"Removing {setting.Name} from the list of slot settings");
                    existingSlotSettings.Remove(setting.Name);
                }
            }

            await AppSettingsManagement.PutAppSettingsAsync(webAppClient, settingsDict, targetSite);

            var slotSettings = appSettings
                               .Where(setting => setting.SlotSetting)
                               .Select(setting => setting.Name).ToArray();

            if (!slotSettings.Any())
            {
                return;
            }

            await AppSettingsManagement.PutSlotSettingsListAsync(webAppClient, targetSite,
                                                                 slotSettings.Union(existingSlotSettings), authToken);
        }