3

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

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

就像是

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

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

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

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

Service.exe.config中不存在的设置Manager.Core和存储在哪里?Importer

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

亲切的问候,迈克尔

4

2 回答 2

1

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

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

对于名为 Foo.settings 的设置文件,其中包含单个值“MyName”,如果您查看了 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 中持久保存的方式。实际值是从各种配置文件中读取的,具体取决于范围(可能还有应用程序决定进行的编程更改)

有关如何使用这些的更高级别的视图,请参阅这篇文章

于 2009-04-23T10:19:31.840 回答
0

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

于 2009-04-23T09:45:01.410 回答