не мог сохранить настройки в app.exe.config

Можно разбить длинные линии с каре ^, пока Вы помните, что каре и новая строка после него полностью удалены. Так, если должно быть пространство, где Вы повреждаете строку, включаете пространство. ([еще 113] на этом ниже. )

Пример:

copy file1.txt file2.txt

был бы записан как:

copy file1.txt^
 file2.txt

7
задан Mohsan 21 July 2009 в 05:00
поделиться

4 ответа

Согласно MSDN: Метод ConfigurationManager.GetSection ,

Метод ConfigurationManager.GetSection получает доступ к информации о конфигурации времени выполнения , которая он не может измениться . Чтобы изменить конфигурацию, вы используете метод Configuration.GetSection в файле конфигурации, который вы получаете с помощью одного из следующих открытых методов:

Однако , если вы хотите обновить файл app.config, я бы прочитал его как XML-документ и обработал бы его как обычный XML-документ.

См. Следующий пример: Примечание: этот образец предназначен только для проверки концепции. Не следует использовать в производстве как есть.

using System;
using System.Linq;
using System.Xml.Linq;

namespace ChangeAppConfig
{
    class Program
    {
        static void Main(string[] args)
        {
            MyConfigSetting.CustomerName = "MyCustomer";
            MyConfigSetting.EmailAddress = "MyCustomer@Company.com";
            MyConfigSetting.TimeStamp = DateTime.Now;
            MyConfigSetting.Save();
        }
    }

    //Note: This is a proof-of-concept sample and 
    //should not be used in production as it is.  
    // For example, this is not thread-safe. 
    public class MyConfigSetting
    {
        private static string _CustomerName;
        public static string CustomerName
        {
            get { return _CustomerName; }
            set
            {
                _CustomerName = value;
            }
        }

        private static string _EmailAddress;
        public static string EmailAddress
        {
            get { return _EmailAddress; }
            set
            {
                _EmailAddress = value;
            }
        }

        private static DateTime _TimeStamp;
        public static DateTime TimeStamp
        {
            get { return _TimeStamp; }
            set
            {
                _TimeStamp = value;
            }
        }

        public static void Save()
        {
            XElement myAppConfigFile = XElement.Load(Utility.GetConfigFileName());
            var mySetting = (from p in myAppConfigFile.Elements("MySettings")
                            select p).FirstOrDefault();
            mySetting.Attribute("CustomerName").Value = CustomerName;
            mySetting.Attribute("EmailAddress").Value = EmailAddress;
            mySetting.Attribute("TimeStamp").Value = TimeStamp.ToString();

            myAppConfigFile.Save(Utility.GetConfigFileName());

        }
    }

    class Utility
    {        
        //Note: This is a proof-of-concept and very naive code. 
        //Shouldn't be used in production as it is. 
        //For example, no null reference checking, no file existence checking and etc. 
        public static string GetConfigFileName()
        {            
            const string STR_Vshostexe = ".vshost.exe";
            string appName = Environment.GetCommandLineArgs()[0];

            //In case this is running under debugger. 
            if (appName.EndsWith(STR_Vshostexe))
            {
                appName = appName.Remove(appName.LastIndexOf(STR_Vshostexe), STR_Vshostexe.Length) + ".exe";
            }

            return appName + ".config";
        }
    }
}

Я также добавил атрибут «TimeStamp» в MySettings в app.config, чтобы легко проверить результат.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="MySettings" type="TestApp.MySettings, TestApp"/>
  </configSections>

  <MySettings CustomerName="" EmailAddress="" TimeStamp=""/>
</configuration> 
5
ответ дан 6 December 2019 в 21:18
поделиться

Во многих случаях (в сценарии с ограниченным доступом) пользователь не имеет права записи непосредственно в приложение. файл конфигурации. Чтобы обойти это, вам нужно использовать usersettings.

Если щелкнуть проект правой кнопкой мыши и выбрать вкладку «Настройки», можно составить список настроек, которые хранятся в файле конфигурации. Если вы выбираете «Область действия» как «Пользователь», настройки автоматически сохраняются в файле конфигурации с использованием типа, который автоматически сохраняет настройки в области AppData пользователей, где у пользователя всегда есть доступ для записи. Параметры также автоматически предоставляются как свойства, созданные в файле кода Properties \ Settings.Designer.cs, и доступны в вашем коде в Properties. Settings.Default .

Пример:

Допустим, вы добавили пользовательскую настройку под названием CustomerName :

При загрузке приложения вы захотите получить значение из сохраненной настройки (либо значение по умолчанию, как в конфигурации приложения, либо, если оно сохранено для этого пользователя, файл конфигурации для пользователя):

string value = Properties.Settings.Default.CustomerName;

Если вы хотите изменить значение, просто напишите в него:

Properties.Settings.Default.CustomerName = "John Doe";

Когда вы хотите сохранить все настройки, просто вызовите Save:

Properties.Settings.Default.Save();

Обратите внимание, что при разработке пользовательский файл будет время от времени сбрасываться до значений по умолчанию, но это происходит только при сборке приложения. Когда вы просто запустите приложение, сохраненные вами настройки будут считаны из файла конфигурации пользователя для приложения.

Если вы все же хотите создать свою собственную обработку настроек, вы можете попробовать это один раз,

3
ответ дан 6 December 2019 в 21:18
поделиться

Для фактического обновления файла конфигурации вам необходимо вызвать .Save () для объекта Configuration , а не только в вашей конфигурации объект section.

Вы должны проверить серию из трех частей Джона Риста о настройке .NET 2.0 на CodeProject.

Настоятельно рекомендуется, хорошо написано и чрезвычайно полезно! Он показывает все тонкости работы с конфигурацией .NET 2.0 и выше и очень помог мне разобраться в предмете.

Marc

2
ответ дан 6 December 2019 в 21:18
поделиться

Имейте в виду, что appname.vshost.exe.config возвращается к своему исходному состоянию в конце сеанса отладки. Таким образом, вы можете быть сохранены в файл (вы можете проверить, используя блокнот во время выполнения), затем проигрываю сохраненное содержимое при отладке останавливается.

2
ответ дан 6 December 2019 в 21:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: