2

如果我有一个带有文件的类库app.config(我知道这并不理想,请稍等片刻),该文件具有通过使用项目设置选项卡创建的设置值并按如下方式访问:

Public Shared Function GetMySetting(key As String) As String
    Dim value As String = My.Settings.Item(key)
    If value = String.Empty Then value = "Setting " & key & " not found."
    Return value
End Function

然后我从这样的应用程序中检索设置:

sb.AppendLine("GetMySetting: " & Library.Settings.GetMySetting("SettingC"))

库项目的 app.config 文件中的设置绝对不会复制到应用程序的 app.config 文件中,但我仍然可以My.Settings从库中检索app.config

所以我GetConfigFileName在库中添加了一个函数:

Public Shared Function GetConfigFileName() As String
    Return AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
End Function

并在应用程序中检索它:

sb.AppendLine("Library Config File: " & Library.Settings.GetConfigFileName)

但这会返回应用程序的配置文件。

我如何确定库在调用 My.Settings... 时从哪个 .config 文件中读取?

还是它们被编译到 DLL 中?

4

2 回答 2

1

但这会返回应用程序的配置文件。我如何确定库在调用 My.Settings... 时从哪个 .config 文件中读取?

编辑

您误解了这种情况,请重读这一行:库项目的 app.config 文件中的设置绝对不会复制到应用程序的 app.config 文件中,但我可以从库应用程序中检索 My.Settings。配置。

你是对的。dll.config 中的设置不会自动复制到 app.config 中。

关于您可以从您的 dll 中获得的价值,我仍在寻找更官方的答案,但答案似乎是:

“旧”值(您在开发时定义的值)是硬编码的。如果框架无法访问或打开配置文件,它将使用默认值。如果您在 dll 中使用设置,这种情况总是会发生。

看看这个Settings.Default.<property> 总是返回默认值而不是持久存储(XML文件)中的值

于 2013-06-24T22:11:43.093 回答
0

阅读评论后编辑。

我想我看到了你的追求。My.Settings 将使用类库设置中的编译值作为默认值。我相信这些是编译进去的。你可以反映源代码,看看它是否在它们上设置了 defaultvalue 属性。

您可以通过在主 exe 的应用程序文件中设置值来覆盖这些。如果设置不在 exes 文件中,那么您将使用您在类库中指定的默认设置。

你不应该关心文件名。假设设置是默认设置或被覆盖。如果您需要知道它们是否被覆盖,那是另一个问题。

于 2013-06-24T12:21:24.100 回答