автообновление программы ClickOnce

174
24 ноября 2021, 01:00

Подскажите, возможно ли, чтобы после обновления программы настройки приложения не затирались. В моем случае после запуска приложения происходит подключение к базе данных путем выгрузки ConnectionString'a из XML файла. После первого запуска пользователь вводит все данные для подключения, подключение успешно. После обновления программы настройки слетают и снова нужно заново вводить все данные. Как можно сделать чтобы они сохранялись?

Класс, который хранит данные для подключения и методы сохранения\загрузки

[Serializable]
    public class ConnectionString
    {         
        public string UserId { get; set; }
        public string Host { get; set; }
        public string Database { get; set; }
        public string PWD { get; set; }
        public string TypeDb { get; set; }
        public string СurrentUser { get; set; }
        public string LastId { get; set; }
        public ConnectionString() { }
        public ConnectionString(string userId, string host, string database, string pwd, string typedb, string currentuser, string lastid)
        {           
            UserId = userId;
            Host = host;
            Database = database;
            PWD = pwd;
            TypeDb = typedb;
            СurrentUser = currentuser;
            LastId = lastid;
        }
        public override string ToString()
        {
            return this.TypeDb;
        }

        //Сохранение данных для Connection String'a в файл
        public ConnectionString LoadFile(string path)
        {
            try
            {
                ConnectionString result;
                XmlSerializer formatter = new XmlSerializer(typeof(ConnectionString));
                using (var fs = new FileStream("DataConnection.xml", FileMode.Open))
                {
                    result = (ConnectionString)formatter.Deserialize(fs);
                }
                return result;
            }
            catch
            {
                throw new Exception("File not uploaded!");
            }
        }

        //Загрузка данных для Connection String'a с файла
        public void SaveFile(object obj, string path)
        {
            try
            {
                XmlSerializer formatter = new XmlSerializer(obj.GetType());
                using (var fs = new FileStream("DataConnection.xml", FileMode.Create))
                {
                    formatter.Serialize(fs, obj);
                }
            }
            catch
            {
                throw new Exception("File not saved!");
            }
        }

Так подключаемся к базе

private void ConnectionToBD()
        {
            try
            {
                ConnectionString cs = new ConnectionString();
                var loadData = cs.LoadFile("DataConnection.xml");
                string connString = String.Format("Data Source={0};Initial Catalog={1};User Id={2};Password={3}", loadData.Host, loadData.Database, loadData.UserId, loadData.PWD);
                using (SqlConnection conn = new SqlConnection(connString))
                {
                    conn.Open();                       
                }
            }
            catch
            {
                MessageBox.Show("Ошибка");
             FormConnection formConnection = new FormConnection();
            formConnection.ShowDialog();
            }
        }

если подключение отсутствует, вызывается форма для ввода данных

Answer 1

Могу предложить следующий алгоритм действий:

  1. Добавление файла c настройками в проект

  2. Выберите файл в обозревателе решений. В окне «Свойства» измените свойство «Действие при сборке» на значение «Содержимое».Инструкция MSDN

  3. В разделе «Публикация» -> «Файлы приложения» поставьте галочку "Показать все файлы" и включите файл в публикацию.

READ ALSO
unity.system; Не работают ивенты

unity.system; Не работают ивенты

Есть две части кода:

77
Как упростить код включения/отключения компонентов через GetComponent

Как упростить код включения/отключения компонентов через GetComponent

Как проще и красивей записать следующий код :

218
Поток из консоли и с чем его едят

Поток из консоли и с чем его едят

Мне стало интересно, что именно происходит в данном коде:

116