.net 访问调用应用程序的设置(app.config)

.net 访问调用应用程序的设置(app.config),.net,visual-studio,settings,app-config,.net,Visual Studio,Settings,App Config,我有一个WinForms应用程序(“WF”)和一个由该WinForms应用程序(“LIB”)调用的库 WF有一个Settings.Settings(Visual Studio Designer)和app.config组合。据我推测,设计器是一个自动生成app.config文件的前端。为了在WF中使用这些设置,我使用它自动生成的类的强类型属性(即WF.settings.mytimeoutset) 当WF在LIB中调用一个方法时,我想在LIB中使用WF的一个设置。在被调用方(LIB)代码中,如何从调

我有一个WinForms应用程序(“WF”)和一个由该WinForms应用程序(“LIB”)调用的库

WF有一个Settings.Settings(Visual Studio Designer)和app.config组合。据我推测,设计器是一个自动生成app.config文件的前端。为了在WF中使用这些设置,我使用它自动生成的类的强类型属性(即WF.settings.mytimeoutset)


当WF在LIB中调用一个方法时,我想在LIB中使用WF的一个设置。在被调用方(LIB)代码中,如何从调用方(WF)的app.config中检索设置?

与在windows窗体中检索设置的方式相同。它将首先以原子方式查看调用应用程序的app.config,就像在windows窗体中一样。它将首先在调用应用程序的app.config中自动查找

将对System.Configuration的引用添加到您的项目中

然后在特定的.cs或.vb(或其他)文件中,您希望引用配置文件,添加以下内容:

C#:使用System.Configuration; VB:导入系统配置

然后,您可以使用如下方式访问web配置:

C#: System.Configuration.COnfigurationManager.AppSettings[“您想要的设置”]

VB: System.Configuration.COnfigurationManager.AppSettings(“所需的设置”)


如果你想要一个完整的部分,我想在这个类中也有方法可以做到这一点

将对System.Configuration的引用添加到项目中

然后在特定的.cs或.vb(或其他)文件中,您希望引用配置文件,添加以下内容:

C#:使用System.Configuration; VB:导入系统配置

然后,您可以使用如下方式访问web配置:

C#: System.Configuration.COnfigurationManager.AppSettings[“您想要的设置”]

VB: System.Configuration.COnfigurationManager.AppSettings(“所需的设置”)


如果你想要一个完整的部分,我想在这个类中也有方法可以做到这一点

答案是:不要这样做


让调用应用程序在调用中或构造函数中传递您需要知道的任何信息。被调用的组件不需要了解调用者。

答案是:不要这样做


让调用应用程序在调用中或构造函数中传递您需要知道的任何信息。被调用的组件不需要了解调用者。

就像John说的,这是个坏主意。调用方(本例中为exe)应将所需信息传递给DLL。这样,您就可以稍后在其他地方重新使用DLL,而不会对app.config设置产生“不可见”的依赖关系

试试这个:

Dim oConfiguration As System.Configuration.Configuration
oConfiguration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
Dim sValue As String = oConfiguration.AppSettings.Settings("setting").Value

就像约翰说的,这是个坏主意。调用方(本例中为exe)应将所需信息传递给DLL。这样,您就可以稍后在其他地方重新使用DLL,而不会对app.config设置产生“不可见”的依赖关系

试试这个:

Dim oConfiguration As System.Configuration.Configuration
oConfiguration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
Dim sValue As String = oConfiguration.AppSettings.Settings("setting").Value

LIB不引用WF。因此,它不知道自动生成的WF.Settings类。出于编译/智能感知目的,您可能需要将app.config文件添加到bizlayer中,但它不会在运行时使用它。对于亚音速或EntityFramework这样的问题,您也可以这样做。这里是指向类似问题的另一个链接,但它可能并不完全是您所需要的LIB不引用WF。因此,它不知道自动生成的WF.Settings类。出于编译/智能感知目的,您可能需要将app.config文件添加到bizlayer中,但它不会在运行时使用它。对于亚音速或EntityFramework这样的问题,您也可以这样做。这里是指向类似问题的另一个链接,但它可能并不完全是您所需要的—它不是必需的—它只是有用的。我打赌有一个公认的方法去做,公认的方法是不做。关注点分离,基于组件的开发;这些事情意味着调用者应该向被调用者提供它所需要的。这样,它就可以在不同的上下文中调用。据我所知,app.config中的app代表AppDomain,它们位于同一AppDomain中。正如我所说,设置是不需要的,它只是有用的一个提示。我想我不清楚。我的意思是,如果设置属于调用者,那么调用者应该将其传递给您。库应该完全不知道调用者,或者调用者正在使用什么设置。这允许不同的调用者使用完全不同的设置或完全不同的设置机制调用同一个库。在调用者传递信息之前,他应该仍然能够使用这些信息。而且,仅仅因为你认为分离关注点是最好的方式,它可能不是。如果这是一个初学者项目,或者是一个快速而肮脏的程序,关注点的分离并不真正关注操作(NPI),它不是必需的-它只是有用的。我打赌有一个公认的方法去做,公认的方法是不做。关注点分离,基于组件的开发;这些事情意味着调用者应该向被调用者提供它所需要的。这样,它就可以在不同的上下文中调用。据我所知,app.config中的app代表AppDomain,它们位于同一AppDomain中。正如我所说,设置是不需要的,它只是有用的一个提示。我想我不清楚。我的意思是,如果设置属于调用者,那么调用者应该将其传递给您。库应该完全不知道调用者,或者调用者正在使用什么设置。这允许不同的调用者使用完全不同的设置或完全不同的设置机制调用同一个库。在调用者传递信息之前,他应该仍然能够使用这些信息。而且,仅仅因为你认为分离关注点是最好的方式,它可能不是。如果这是一个初学者项目,或者是一个与conc分离的快速而肮脏的程序