.net Обмен данными конфигурации между двумя программами? - PullRequest
0 голосов
/ 11 декабря 2011

Я использовал настройки приложения (как часть Visual Studio), но не могу получить другое приложение, используя настройки из исходного приложения.

Может кто-нибудь помочь с хранением нескольких строковых переменных между двумяприложения в .net c #?

РЕДАКТИРОВАТЬ: кажется, мне нужно добавить ссылку на мое первое приложение из второго приложения для доступа к настройкам Properties.Default - как мне это сделать?

Ответы [ 2 ]

3 голосов
/ 11 декабря 2011

если вы хотите поделиться конфигурацией между проектами, вы можете просто добавить файл из другого проекта 'as a link': щелкните правой кнопкой мыши проект >> выберите 'Add existing file' >> перейдите к файлу app.config >> щелкните раскрывающийся список рядом с кнопкой add и выберите add as a link.

или

если вы хотите поделиться конфигурацией между двумя приложениями, это метод

У меня будет общая сборка, которая содержит ваш класс настроек. Затем вы можете сериализовать / десериализовать этот класс в обычное место на жестком диске:

[XmlRoot()]
public class Settings
{
    private static Settings instance = new Settings();

    private Settings() {}

    /// <summary>
    /// Access the Singleton instance
    /// </summary>
    [XmlElement]
    public static Settings Instance
    {
        get
        {
            return instance;
        }
    }

    /// <summary>
    /// Gets or sets the height.
    /// </summary>
    /// <value>The height.</value>
    [XmlAttribute]
    public int Height { get; set; }

    /// <summary>
    /// Main window status (Maximized or not)
    /// </summary>
    [XmlAttribute]
    public FormWindowState WindowState
    {
        get;
        set;
    }

    /// <summary>
    /// Gets or sets a value indicating whether this <see cref="Settings"/> is offline.
    /// </summary>
    /// <value><c>true</c> if offline; otherwise, <c>false</c>.</value>
    [XmlAttribute]
    public bool IsSomething
    {
        get;
        set;
    }

    /// <summary>
    /// Save setting into file
    /// </summary>
    public static void Serialize()
    {
        // Create the directory
        if (!Directory.Exists(AppTmpFolder))
        {
            Directory.CreateDirectory(AppTmpFolder);
        }

        using (TextWriter writer = new StreamWriter(SettingsFilePath))
        {
            XmlSerializer serializer = new XmlSerializer(typeof(Settings));
            serializer.Serialize(writer, Settings.Instance);
        }
    }

    /// <summary>
    /// Load setting from file
    /// </summary>
    public static void Deserialize()
    {
        if (!File.Exists(SettingsFilePath))
        {
            // Can't find saved settings, using default vales
            SetDefaults();
            return;
        }
        try
        {
            using (XmlReader reader = XmlReader.Create(SettingsFilePath))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(Settings));
                if (serializer.CanDeserialize(reader))
                {
                    Settings.instance = serializer.Deserialize(reader) as Settings;
                }
            }
        }
        catch (System.Exception)
        {
            // Failed to load some data, leave the settings to default
            SetDefaults();
        }
    }
}

Ваш XML-файл будет выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Height="738" WindowState="Maximized" IsSomething="false" >
</Settings>
2 голосов
/ 12 декабря 2011

Если вы хотите, чтобы один и тот же пользователь использовал одни и те же настройки для обоих приложений ИЛИ вы хотите, чтобы все пользователи использовали одни и те же настройки, у вас есть несколько вариантов выбора помимо стандартных настроек приложения:

1) Сохранение данныхв реестре.Вы можете сделать настройки пользовательскими или глобальными для машины.

2) Сохранить структурированный файл, например, файл XML, содержащий настройки в одном из стандартных каталогов: Environment.SpecialFolder.CommonApplicationData для всехпользователи или Environment.SpecialFolder.ApplicationData для одного пользователя.Это был бы подход, который я бы использовал.

...