引用的库为My.Settings使用的app.config文件的位置?

时间:2013-06-24 10:11:40

标签: vb.net visual-studio app-config

如果我有一个带有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?

2 个答案:

答案 0 :(得分:1)

  

但是返回应用程序的配置文件。我该怎么办?   库调用时读取的.config文件   My.Settings ...?

  • 默认情况下,它始终为main.exe.config

    看一下这个详细的答案 C# DLL config file 更多信息

  • 您可以使用外部配置文件。 MSDN上的This article 解释如何。

修改

  

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

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

关于你能从你的dll获得的价值,我仍然在寻找更多正式答案,但答案似乎是:

  

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

看看这个Settings.Default.<property> always returns default value instead of value in persistant storage (XML file)

答案 1 :(得分:0)

阅读评论后编辑。

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

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

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