Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在应用程序之间共享设置_C#_.net_Configuration_Settings - Fatal编程技术网

C# 在应用程序之间共享设置

C# 在应用程序之间共享设置,c#,.net,configuration,settings,C#,.net,Configuration,Settings,我有多个.NET程序集,它们都需要共享公共用户设置,例如首选项、用户名等。一个是WPF应用程序,另一个是控制台应用程序,第三个是Office加载项。所有这些设置都属于用户范围 只有WPF应用程序需要能够更改设置。其余的人只是读一下 理想情况下,我希望使用.NET配置框架。但我不知道该怎么做。如果我向WPF应用程序添加设置,其他应用程序如何找到user.config文件 创建类库、使用IsolatedFileStorage和序列化设置是否更容易 任何建议都将不胜感激。我建议您创建服务,以提供和更新

我有多个.NET程序集,它们都需要共享公共用户设置,例如首选项、用户名等。一个是WPF应用程序,另一个是控制台应用程序,第三个是Office加载项。所有这些设置都属于用户范围

只有WPF应用程序需要能够更改设置。其余的人只是读一下

理想情况下,我希望使用.NET配置框架。但我不知道该怎么做。如果我向WPF应用程序添加设置,其他应用程序如何找到user.config文件

创建类库、使用IsolatedFileStorage和序列化设置是否更容易


任何建议都将不胜感激。

我建议您创建服务,以提供和更新用户信息和/或偏好。它将是更好的体系结构、更干净的解决方案,并且更易于维护和扩展。

您可以实现自定义设置类,继承。作为一个良好的开端,您可以将默认用户设置文件添加到示例项目中(右键单击项目->
属性->
设置->
此项目不包含默认设置文件。单击此处创建一个。
)。添加用户范围的设置,并调查设计器生成的Settings.designer.cs文件的结构:

namespace ConsoleApplication1.Properties {


    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {

        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

        public static Settings Default {
            get {
                return defaultInstance;
            }
        }

        [global::System.Configuration.UserScopedSettingAttribute()]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [global::System.Configuration.DefaultSettingValueAttribute("John Doe")]
        public string Name {
            get {
                return ((string)(this["Name"]));
            }
            set {
                this["Name"] = value;
            }
        }
    }
}
在自定义实现中,您将不受设计器生成的访问修饰符的限制,因此您可以使用内部setter将Settings类实现为内部的,仅对所需的程序集可见,或满足您需要的任何设置

当然,您始终可以实现自定义序列化/反序列化机制,但您将失去ApplicationSettingsBase的Updgrade、Reload和Reset方法提供的功能。如果你不需要这些,这可能是更干净的方法