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

本文关键字:app 配置 config DLL 控制台 应用 程序转换 | 更新日期: 2023-09-27 18:15:09

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

然而,我遇到了一个问题,在我将其转换为DLL后,消费者应用程序每当试图访问附加到DLL的app.config文件中存储的值时就会遇到错误。

将c#控制台应用程序转换为DLL

这些东西像连接字符串,路径到文件夹存储数据和其他重要信息。

我被告知我可以-将配置放入消费者应用程序中,并将所有这些选项作为方法的参数传递到DLL中(重建DLL需要大量工作)-使用某种形式的XML文件来存储值,然后使用特殊的方法将它们取出。举个例子就好了!-使用设置文件-使用某种形式的函数(我不理解-在。net上还不太热门)-将值硬编码为字符串,int, nools等在我的DLL

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

任何提示和例子将非常感激-我已经阅读和搜索了这个论坛上的答案,顺便说一下,之前有人说"这已经回答了很多次"也许只是不以某种方式一些新的dll和消费者控制台应用程序会理解?

谢谢你的帮助!

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

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

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

要创建设置文件,右键单击解决方案资源管理器-> Properties中的类库项目。单击设置选项卡,然后单击创建超链接。确保将您创建的任何设置设置为Applciation Scope

然后,您将在类库的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>