C# 如何在VS 2008和.NET中使用跨越多个解决方案和项目的设置

C# 如何在VS 2008和.NET中使用跨越多个解决方案和项目的设置,c#,.net,settings,projects,C#,.net,Settings,Projects,我不太清楚.NET和C#3.5如何处理跨越多个项目和多个解决方案的应用程序设置。也许有人能帮我把事情弄清楚 我有两个解决方案,都包含几个项目。其中一些项目在Properties文件夹下包含Setttings.settings文件,其中包含此项目中的源文件所需的特定配置变量 差不多 作业管理器解决方案 Manager.Core(带有设置文件) Manager.UserInterface(带有设置文件) 经理,分机 进口商解决方案 导入器(带设置文件) 服务(带有设置文件) 可以看出,Man

我不太清楚.NET和C#3.5如何处理跨越多个项目和多个解决方案的应用程序设置。也许有人能帮我把事情弄清楚

我有两个解决方案,都包含几个项目。其中一些项目在Properties文件夹下包含Setttings.settings文件,其中包含此项目中的源文件所需的特定配置变量

差不多

  • 作业管理器解决方案
    • Manager.Core(带有设置文件)
    • Manager.UserInterface(带有设置文件)
    • 经理,分机
  • 进口商解决方案
    • 导入器(带设置文件)
    • 服务(带有设置文件)
  • 可以看出,
    Manager.Core
    包含自己的配置文件,用于存储数据库连接信息和其他内容,而
    导入器
    包含自己的配置文件,其中存储导入目录的路径,以知道从何处获取需要导入到数据库中的文件,使用
    Manager.Core
    执行此操作。(这就是Manager.Core的作用所在,它包含了与DB一起工作的所有查询和插入)

    另一方面,
    服务
    是一个Windows服务,它使用导入程序,让它每小时左右运行一次,包含错误记录路径的自身配置设置

    现在,当我编译服务时,只有一个名为Service.exe.config的配置文件,其中只包含服务项目中指定的配置参数。我的第一种方法是复制Service.exe.config中Manager.Core和Importer的每个设置条目。但测试表明,不知何故,进口商的参数是存在和使用的

    Service.exe.config中不存在
    Manager.Core
    Importer
    的设置时,它们存储在哪里

    Manager.Core
    的设置是否也存在,这意味着无需在服务设置文件中复制这些配置设置的条目

    亲切问候,,
    Michael未使用这些选项,但您能否将它们替换为指向解决方案中单个文件的链接?

    设置默认值通常生成为代码,然后编译到生成的dll中

    他们将CustomTool属性设置为“SettingsSingleFileGenerator”

    对于一个名为Foo.settings的设置文件,其中包含一个值“MyName”,其作用域应用程序类型为字符串,在命名空间Company.Properties(名为“Company”的项目的默认位置)中的值为“Shuggy”。如果查看reflector中的dll,您将在Company中找到一个类。Properties命名空间如下所示:

    [GeneratedCode(
    "Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator"
    ,"9.0.0.0")] 
    [CompilerGenerated]
    internal sealed class Foo : ApplicationSettingsBase
    {
        private static Settings defaultInstance = 
            ((Settings) SettingsBase.Synchronized(new Settings()));
    
        public static Settings Default
        {
            get { return defaultInstance; }
        }
    
    
        [ApplicationScopedSetting]
        [DefaultSettingValue("Shuggy")]
        [DebuggerNonUserCode]
        public string MyName
        {
            get
            {
                return (string) this["MyName"];
            }
        }
    }
    
    这就是设置结构和默认值在与其相关的DLL中持久化的方式。实际值是从各种配置文件中读取的,具体取决于作用域(以及应用程序决定执行的编程更改)


    有关如何使用这些工具的更高层次视图,请参见

    可以做到这一点,尽管我更愿意利用已有的工具。这并不是说它不起作用,我只是不明白它到底是如何起作用的这是否意味着,当我在应用程序中包含外部DLL时,如果不重新编译外部DLL,我无法更改其应用程序设置?可以通过标准用户级或应用程序级文件更改设置,我不认为可以从foo.exe.config文件更改用户设置,但可以查看应用程序范围的设置,以了解这些设置的工作原理。