类库中的.net加载配置

时间:2014-09-27 16:52:47

标签: vb.net class-library

让我说我有: 1)1个WindowsForm on" A"项目 2)1个WindowsForm on" B"项目 3)1类库(GAC)

条件 两个Project引用都是相同的

第1部分: 我在我的类库中有my.settings来保存使用公共函数的配置

第2部分: 我从" A"创建价值/配置。并将其存储在我的类库中。 设置已成功保存,并加载值/配置,没有错误

问题: 1)。为什么我无法从" B"加载价值/配置? ? 显示NullException 首先我想,在类库中使用my.resources,但my.resources只读

2)。将1类库连接到多个项目的最佳解决方案

类库中的代码以节省值

Public Sub Kucing_simpan(ByVal value As String)
    My.Settings.Kucing = value
    My.Settings.Save()
End Sub

类库中的代码加载值

Public Function kucing_ambil()
    Dim value As String
    value = My.Settings.Kucing
    Return value
End Function

代码" A"

dim save as new Zombie.Kencing 'My class Library Name
save.Kucing_simpan(textbox1.text)

代码" B"

dim load as new Zombie.Kencing 'My class Library Name
DataGridView1.Rows(0).Cells(1).Value = load.kucing_ambil

1 个答案:

答案 0 :(得分:0)

你不能做你想做的事 - 至少不是你想要的方式。

首先,您必须了解保存设置的方式/位置。使用应用程序的默认命名等,项目A - WindowsApplication1会将其设置保存为隐秘的内容,例如:

C:\Users\<UserName>\AppData\Local\Microsoft\_
    WindowsApplication1_Url_ggn13vigzyicmtfkwaa3vi5tyxn0sy3r\1.0.0.0\user.config

NET创建哈希以确保具有相同名称的应用程序具有不同的安全位置来存储设置。因此,WindowsApplication3将具有不同的哈希值;这也是您的名为WindowsApplication1的第17个项目不会意外加载或找到WinApp 1-16的设置的方式。

接下来,您的“设置类库”不是单独的应用程序。作为一个DLL,它就像是一组函数一样运行,并且与调用它的App相关联。因此,当项目A通过ClassLib保存设置时,它们将保存到与项目B不同的位置。即使使用类库,NET也会使用应用程序凭据和信息来编制文件名和路径。


可以做的是写一个定义所有可能设置的类(或创建ListDictionary然后保存到固定的已知位置如:

Private Comp As String = "ZiggySoft"
Private Prod As String = "ZiggyWare"

Private settingsFile As String

'...
settingsfile = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
settingsfile = Path.Combine(settingsfile, Comp, Prod, "usersettings.dat")

这将导致:      “C:\用户\\应用程序数据\漫游\ ZiggySoft \ ZiggyWare \ usersettings.dat”

在每个项目中包含相同的文件(添加现有项目,可以从下拉列表中选择添加为链接)。现在,您可以将设置读取和写入您负责的文件。如果序列化,可以在3-5行代码中保存/加载整个类或列表。

当项目A加载设置时,它也会获得仅适用于B或J或V的设置,但普通的设置将会被共享。