【问题标题】:.net load configuration in class library.net 加载类库中的配置
【发布时间】:2014-11-22 11:50:31
【问题描述】:

假设我有: 1)“A”项目上的1个WindowsForm 2)“B”项目上的1个WindowsForm 3)1个类库(GAC)

条件 两个项目引用相同

第 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

【问题讨论】:

  • 每个应用程序(来自 A Prj 和 B Prj)都有自己的 My.Settings 对象,为什么不使用它们呢? 你想要完成什么
  • 我想用“A”项目将值/配置存储在类库中,所以“B”或“C”或“D”项目可以从类库中获取值/conf..像这样, "A" 将值保存到类库,"B" 加载值,这可能吗??
  • 至少,你需要一大堆设置; Class Lib 不会将它们划分为 A,一些用于 B 等,也无法获取 A 的 A 设置。CLassLib 也不会将它们加载到 A 的 my.settings,它们将是 DLL。而且您必须为每个设置公开道具。更好的是,IMO,添加一个类来管理它们,在 A、B、C 和 D 之间共享,它还可以为您管理保存和加载。
  • 类库中的设置对象不是“A”项目,“A”的赋值是为了改变值
  • 我意识到了;我是说 Lib 无法将它们加载到 A 或 A 的设置中。 Why i can't load the value/configuration from "B" edit your post 显示失败的代码;我们不知道代码是什么样子的

标签: vb.net class-library


【解决方案1】:

你不能做你想做的事——至少不能按照你的方式去做。

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

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

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

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


可以做的是编写一个类来定义所有可能的设置(或创建一个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:\Users\\AppData\Roaming\ZiggySoft\ZiggyWare\usersettings.dat"

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

当项目 A 加载设置时,它还会获取仅适用于 B 或 J 或 V 的设置,但常见的设置将并且可以共享。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 2014-10-24
    相关资源
    最近更新 更多