无法从App.Config中检索密钥

Pos*_*Guy 4 asp.net

在我的WAP项目中,我引用了另一个C#项目(非Web).在那个C#项目中,我有一个app.config,我将其重命名为[projectName] .config

然后我尝试从我的[项目] .config中获取一个来自我的C#项目中的一些代码的密钥,它找不到它:

return ConfigurationManager.AppSettings["somekey"]
Run Code Online (Sandbox Code Playgroud)

所以我想知道为什么它无法读取我的app.config.我认为ConfigurationManager能够从Web项目的web.config和我的[projectName] .config(app.config)文件中读取密钥,该文件也在我引用的项目中?

Gab*_*ams 7

ConfigurationManager将读取应用程序主机的配置.在您的情况下,Web应用程序是应用程序的主机 - 因此,调用ConfigurationManager将从您的web.config中读取 - 即使您从引用的dll调用ConfigurationManager.

如果您的Web应用程序引用了一个dll,那么该DLL应该从web.config获取其配置.这是应用程序的最佳选择.如果dll由多种类型的应用程序引用,则配置中的设置可能需要不同.


dcp*_*dcp 5

试着把它放在你的web.config中:

<appSettings file="externalSettings.config"/>
Run Code Online (Sandbox Code Playgroud)

externalSettings.config是您要使用的另一个配置文件.

对于非Web程序集,它会查找AssemblyName.dll,其中AssemblyName对应于程序集名称.例如:如果您的程序集名称是Com.MyProject.Library1.dll,那么它正在寻找的配置文件是Com.MyProject.Library1.dll.config.

更新: 我做了这方面的一些更多的研究,并且指出在这里,"ConfigurationManager中会从被加载的AppDomain时加载的应用程序的配置文件中读取".因此,对于您的Web应用程序,如果您ConfigurationManager从aspx代码中进行访问,它将从web.config文件中读取.

我认为最适合做你想要的解决方法是我已经提供的解决方法,即使用appSettings配置参数,这将允许你有一个aspx应用程序和类库的共享配置文件.

例如,在共享配置文件中,您需要以下内容:

<appSettings>
    <add key="Key1" value="test"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)

我们说这个文件是c:\temp\shared.config.然后在你的web.config中,你可以像这样引用它:

<appSettings file="C:\\temp\\shared.config"></appSettings>
Run Code Online (Sandbox Code Playgroud)

您可以将同一行放在类库的app.config中.

现在你可以使用:

ConfigurationManager.AppSettings["Key1"]
Run Code Online (Sandbox Code Playgroud)

从您的aspx应用程序或您的类库中,您将获得价值.

因此,如果您确实需要在aspx和类库之间共享"通用"配置参数,那么这就是实现它的方法.