我正在编写一个c#类库,需要能够从web读取设置。config或app.config文件(取决于DLL是否从ASP. config引用。NET web应用程序或Windows窗体应用程序)。

我发现

ConfigurationSettings.AppSettings.Get("MySetting")

但该代码已被微软标记为弃用。

我读到我应该使用:

ConfigurationManager.AppSettings["MySetting"]

但是,在c#类库项目中,System.Configuration.ConfigurationManager类似乎不可用。

最好的方法是什么?


当前回答

网络。配置用于web应用程序。网络。Config默认情况下有几个web应用程序所需的配置。你可以有一张网。为web应用程序下的每个文件夹配置。

app.config用于Windows应用程序。当您在Visual Studio中构建应用程序时,它将自动重命名为<appname>.exe。配置和此文件必须随应用程序一起交付。

你可以使用相同的方法从两个配置文件中调用应用程序设置值: System.Configuration.ConfigurationSettings.AppSettings(“关键”)

其他回答

右键单击你的类库,从菜单中选择“添加引用”选项。

在. net选项卡中,选择System.Configuration。这将包括系统。将DLL文件配置到项目中。

您可以将App.config文件添加到DLL文件中。config只适用于可执行的项目,因为所有DLL文件都从正在执行的EXE文件的配置文件中获取配置。

假设你的解决方案中有两个项目:

SomeDll SomeExe

您的问题可能与您将app.config文件包含到SomeDLL而不是SomeExe有关。SomeDll能够从SomeExe项目中读取配置。

额外:如果你正在处理一个类库项目,你必须嵌入设置。json文件。

类库不应该直接引用 App.config类没有App.config,因为它不是一个 Application是一个类。

转到JSON文件的属性。 Change Build Action ->嵌入式资源。 使用下面的代码来阅读它。

var assembly = assembly . getexecutingassembly ();

var resourceStream = assembly。GetManifestResourceStream(“Assembly.file.json”);

string myString = reader.ReadToEnd();

现在我们有一个JSON字符串,我们可以使用JsonConvert反序列化它

如果您没有在程序集中嵌入该文件,则不能只使用DLL文件而不使用该文件

试试这个:

string keyvalue = System.Configuration.ConfigurationManager.AppSettings["keyname"];

在网络上。配置文件,这应该是下一个结构:

<configuration>
<appSettings>
<add key="keyname" value="keyvalue" />
</appSettings>
</configuration>

另一个可能的解决方案:

var MyReader = new System.Configuration.AppSettingsReader();
string keyvalue = MyReader.GetValue("keyalue",typeof(string)).ToString();