我正在阅读有关 applicationSettings 的文章和论坛帖子将近一周了。
在几乎每个线程中,似乎都有人正确地指出,类库在部署时不能有配置文件,并且它们在设计时配置的 applicationSettings 必须在托管/的应用程序的可执行.exe.config 配置文件中指定/合并消耗 dll。
不一定是真的。
您可以但您不需要合并它们的类库设置,除非您想为用户提供一种“覆盖”默认值的方法——这些默认值是使用在程序集中硬编码的 DefaultValueAttribute 指定的。
所以,举一个非常简单实用的例子。让我们使用 VB.NET 1。我创建了一个名为 ClassLibrary 的类库项目。2. 显示所有文件,展开 MyProject,双击 Settings.settings。3. 添加一个名为 Message 的设置,其值为“Hello!”的应用程序范围。4.在Class1.vb中创建一个属性(自动添加的类)
Public Class Class1
Public Shared ReadOnly Property Message As String
Get
Return My.Settings.Message
End Get
End Property
End Class
- 创建一个 VB WinForms 项目并将其命名为 WinForm。
- 添加对 ClassLibrary 项目的引用。
向已创建的 Form1 添加一个按钮并双击它。8 将一些代码添加到 Button1_Click 处理程序。应该是这样的。
公开课形式1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click MessageBox.Show(ClassLibrary.Class1.Message) End Sub
结束类
有WinForm“设置为启动项目”
现在,在 IDE 中一切正常。运行解决方案,您将获得预期的 Hello!当您按下按钮时。如果你去更改库的 app.config 中的设置,说“再见!” 然后你再次运行解决方案,你会得到“再见!”
但是,右键单击 WinForm 项目并“在资源管理器中打开”并进入 Debug 文件夹。目前还没有 WinForm.exe.config 文件。让我们快速创建一个。切换回 VS 并在选择 WinForm 项目时单击以显示所有文件。展开 MyProject,打开 Settings.settings,创建一个设置(没关系)并保存。我们开始了,一个 App.config 被创建,如果我构建这个解决方案,Debug 文件夹将包含一个 WinForm.exe.config。
告诉我如何从类库配置中合并我的消息设置
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="ClassLibrary.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<ClassLibrary.My.MySettings>
<setting name="Message" serializeAs="String">
<value>Hello!</value>
</setting>
</ClassLibrary.My.MySettings>
</applicationSettings>
</configuration>
进入 WinForm 的配置
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="WinForm.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>
<applicationSettings>
<WinForm.My.MySettings>
<!--<setting name="A" serializeAs="String">
<value>A</value>
</setting>-->
</WinForm.My.MySettings>
</applicationSettings>
</configuration>
所以我可以将 WinForm.exe.config 中的 Message 设置值更改为其他值,应用程序将显示这个新值,覆盖 DefaultValueAttribute。