我不太确定.NET和C#3.5如何处理跨多个项目以及多个解决方案的应用程序设置。也许有人可以帮我解决问题。
我有两个解决方案,都包含几个项目。其中一些项目在Properties文件夹下包含 Setttings.settings 文件,其中包含此项目中源文件所需的特定配置变量。
像
这样的东西可以看出,Manager.Core
包含自己的配置文件来存储数据库连接信息和其他东西,而Importer
包含自己的配置文件,存储导入目录的路径以知道在哪里使用Manager.Core
获取导入数据库所需的文件。 (这就是Manager.Core的用途,它包含了与DB一起使用的所有查询和插入内容)
Service
是一个使用Importer的Windows服务,让它每小时左右运行一次,包含自己的错误记录路径配置设置。
现在,当我编译服务时,只有一个名为 Service.exe.config 的配置文件,其中包含仅服务项目中指定的配置参数。我的第一种方法是在 Service.exe.config 中复制Manager.Core和Importer的每个设置条目。但测试表明,不知何故,进口商的参数存在并被使用。
Service.exe.config 中不存在Manager.Core
和Importer
时存储的设置在哪里?
Manager.Core
的设置是否也存在,这意味着不必在服务设置文件中复制这些配置设置的条目?
亲切的问候, 迈克尔
答案 0 :(得分:1)
设置默认值通常生成代码,然后编译为生成的dll
他们设置了CustomSoolFileGenerator的CustomTool属性
对于名为Foo.settings的设置文件,其中包含带有范围的单个值“MyName”应用程序类型为字符串的应用程序,在名称空间Company.Properties(项目的默认位置,名为“Company”)中,值为“Shuggy”(如果您查看)反射器中的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
答案 1 :(得分:0)
不使用这些,但是你可以用解决方案中单个文件的链接替换它们吗?