【问题标题】:How to work with settings spanning over multiple Solutions and Projects in VS 2008 and .NET如何在 VS 2008 和 .NET 中使用跨越多个解决方案和项目的设置
【发布时间】:2010-10-21 07:49:35
【问题描述】:

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

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

类似

  1. JobManager 解决方案
    • Manager.Core(带有设置文件)
    • Manager.UserInterface(带有设置文件)
    • Manager.Extension
  2. 进口商解决方案
    • 导入器(带有设置文件)
    • 服务(带有设置文件)

可以看出,Manager.Core 包含它自己的配置文件来存储数据库连接信息和其他东西,而 Importer 包含它自己的配置文件,存储到导入目录的路径以知道从哪里获取文件需要使用Manager.Core 导入数据库才能执行此操作。 (这就是 Manager.Core 的用途,它包含与数据库一起使用的所有查询和插入)

另一方面,Service 是一个 Windows 服务,它使用 Importer,让它每隔一小时左右运行一次,包含自己的错误日志路径配置设置。

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

Manager.CoreImporter 的设置在 Service.exe.config 中不存在时存储在哪里?

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

亲切的问候, 迈克尔

【问题讨论】:

    标签: c# .net settings projects


    【解决方案1】:

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

    他们设置了“SettingsSingleFileGenerator”的 CustomTool 属性

    对于名为 Foo.settings 的设置文件,其中包含单个值“MyName”,范围为“Shuggy”类型字符串应用程序,位于命名空间 Company.Properties(名为“Company”的项目的默认位置),如果您查看在反射器中的 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 中。实际值是从各种配置文件中读取的,具体取决于范围(可能还有应用程序决定进行的编程更改)

    有关如何使用这些的更高级别的视图,请参阅this article

    【讨论】:

    • 这是否意味着,当我在应用程序中包含外部 DLL 时,如果不重新编译外部 DLL,我就无法更改其应用程序设置?
    • 可以通过标准用户级别或应用程序级别文件更改设置,我不相信用户设置可以从 foo.exe.config 文件中更改,但应用程序范围的可以参见@987654322 @ 了解这些设置如何工作的概述。
    【解决方案2】:

    没有使用这些,但您可以将它们替换为解决方案中单个文件的链接吗?

    【讨论】:

    • 可以这样做,但我更愿意利用已经存在的东西。这并不是说它不起作用,我只是不明白它是如何工作的。 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多