类库是否可以有App.config文件?

46 c# app-config winforms

以下是我的解决方案目前的样子:

在此输入图像描述

在Tutomentor.Branding项目中,我想在App.config文件中保存品牌信息,如名称,颜色等.

在Tutomentor.Data项目中,当我添加实体.edmx模型文件时创建了App.config.

这可能吗?有什么建议?

部署时,输出COMBINE会将这些App.config文件合并为一个吗?

Mat*_*zer 47

不,类库可以保存设置文件,但它们的值将在应用程序配置中定义(web.config,app.config ...).

这是因为配置设置覆盖功能.

您需要在应用程序的app.config或web.config中声明程序集的配置部分(WPF,SL,ASP.NET ...),并为正确程序集中定义的特定数量的设置定义值.设置.

编辑:将一个设置文件添加到您的项目并添加一个具有应用程序范围的设置,您的程序集将具有以下内容:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="Assembly1.Settings1" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <applicationSettings>
        <Assembly1.Settings1>
            <setting name="settingA" serializeAs="String">
                <value>a value</value>
            </setting>
        </Assembly1.Settings1>
    </applicationSettings>
</configuration> 
Run Code Online (Sandbox Code Playgroud)

现在您需要转到您的应用程序,并且需要复制粘贴节组,节声明以及设置值的定义.就这样.

  • 关于编辑:已经存在的Copypasting设置听起来像个坏主意.你有什么其他方法吗? (3认同)

小智 41

虽然这是一个较老的线程,但它确实是另一种看法.

看来你可能想以不同的方式看待这个问题.

类库本质上应该是可移植的.因此,任何所需的配置都应该传递给类,而不是驻留在库中.连接字符串之类的东西本质上是暂时的,因此将它们放在拥有的应用程序中是有意义的.

使用库中包含的方法时,您可以将任何所需信息作为方法签名的一部分传递,或者作为类中的公共属性传递.我建议您为配置项创建公共属性,并在实例化类时传递它们.

现在你对DLL的app.config没有任何问题,然后DLL真正可移植.

  • 我明白你的意思,我同意.但是为什么Visual Studio甚至允许为DLL创建"Settings.settings"文件?微软只是在拖累我们吗? (5认同)
  • @jmbpiano 据我所知,这并不完全正确。VS 2017(以及 2013)将创建 `library.dll.config` 文件,但不会使用它。唯一使用的配置文件是 exe 的。您的设置有效的原因是您的应用程序使用了在 Settings.Designer.cs 中配置的默认值。如果您尝试在本地(在 VS 之外)修改库的配置文件,则修改将被忽略。 (4认同)
  • @kwitee 谢谢你的澄清。我对我的插件进行了一些测试,你是对的。 (2认同)

小智 6

只需创建自己的XML文件,将其命名为appConfig.xml或类似名称,让您的类库使用System.Xml而不是System.Configuration读取文件,并将文件与您的dll一起打包.