我正在将控制台应用程序转换为DLL,但希望保留app.config配置

时间:2014-07-28 15:19:12

标签: c# .net dll configuration configuration-files

我正在将.NET 4控制台应用程序转换为DLL,以便我可以从多个消费者,服务,控制台应用程序等中使用它。

但是我遇到的问题是,在将其转换为DLL后,消费者应用程序在尝试访问存储在附加到DLL的app.config文件中的值时会遇到错误。

Converting a C# Console App to a DLL

这些是连接字符串,存储数据的文件夹路径以及其他重要信息。

我被告知我也可以 - 将配置放入消费者应用程序并将所有这些选项作为参数传递给DLL(重建DLL的很多工作) - 使用某种形式的XML文件来存储值,然后使用特殊方法将它们取出。例子很棒! - 使用设置文件 - 使用某种形式的功能(我不明白 - 在.NET上不太热) - 在我的DLL中将值重新编码为字符串,整数,nools等

此配置文件中的值不会更改,因为它们与DLL的内容而非消费者应用程序相关。因此,当DLL首先将它们硬编码时,传递它们似乎有很多工作。

任何提示和示例都将非常感激 - 我已经在这个论坛上阅读并搜索了这个问题的答案,然后有人说#34;这已被多次回答"也许只是在一些新的DLLS和消费者控制台应用程序可以理解的方式?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

将app.config值移动到使用者应用app.config。您不需要将配置传递给dll,它仍然可以使用相同的名称引用配置

答案 1 :(得分:0)

当我遇到这种情况时,我喜欢在类库中创建一个settings文件。这将自动将app.config添加到具有必要的配置xml的类库中。这种方法有两个优点:您可以访问类库中的所有设置(通过Properties.Settings.Default.xxx),消费者也可以通过自己的配置文件更改值。

要创建设置文件,请右键单击解决方案资源管理器中的类库项目 - > 属性的。单击设置选项卡,然后单击创建超链接。请务必将您创建的所有设置设置为Applciation 范围

然后,您将在app.config中为您的类库获取类似内容:

<?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="Example.ClassLibrary.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
</configSections>
<applicationSettings>
    <Example.ClassLibrary.Properties.Settings>
        <setting name="ExampleConnectionString" serializeAs="String">
            <value>DataSource=xxxx</value>
        </setting>
    </Example.ClassLibrary.Properties.Settings>
 </applicationSettings>
</configuration>

然后,您可以在类库中引用该值

Properties.Settings.Default.ExampleConnectionString.

您可以通过将xml复制到您的消费者的app.config中来覆盖您的消费者(即控制台应用程序)。

<?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="Example.ClassLibrary.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
</configSections>
<applicationSettings>
    <Example.ClassLibrary.Properties.Settings>
        <setting name="ExampleConnectionString" serializeAs="String">
            <value>OVERRIDE IN CONSUMER</value>
        </setting>
    </Example.ClassLibrary.Properties.Settings>
 </applicationSettings>
</configuration>