我有一个独立的WinForms应用程序,我们称之为“程序A”。程序A让用户创建一个文件并保存一些信息。程序A还公开了一些公共类。
另一个独立的WinForms应用程序(“程序B”)引用程序A,并使用它的一些公共类。
但是,程序A的一些类需要打开用户创建的文件,以便从中检索数据。在程序A中,用户文件的位置保存在“设置”(当然是作为用户范围设置)中,并通过
My.Settings
.
这一切都很好,直到程序B运行-当它运行并使用程序A中需要从程序A中读取的类时
我的设置
,设置为空-就好像它们被重置了一样(就像您第一次运行程序A或在新的用户帐户下)。任何
适用范围
保留设置,但任何
用户范围
设置被重置为它们的默认值(当程序A被写入时,它们在IDE中被设置为什么)。
下面是一个伪代码示例:
程序A:
Namespace ProgramA
Public Class Foo
Public Shared Function GetStuff() as Object
File = OpenFile(My.Settings.UserFileName)
Return File.ReadStuff()
End Function
End Class
End Namespace
程序B:
TheStuffIWant = ProgramA.Foo.GetStuff()
假设用户已经至少运行了一次程序A并打开了一个文件,那么程序A
My.Settings.UserFileName
应该设置。
当程序B调用时
Foo.GetStuff()
,它不会返回任何内容,因为
我的.settings.userfilename
不包含用户的文件名-更准确地说,它包含该设置的“默认”值(如在第一次设置设置时在IDE中设置的)。但是,如果你转身启动程序A,它会记住用户的设置
UserFileName
.
所以-问题是:
在引用程序集中调用函数时,为什么不保留用户的设置?对我所看到的行为有什么解释吗,还是我遗漏了一些非常明显的东西?或者也许我只是把这一切搞错了,我不应该让程序A中的任何公共类依赖于
我的设置
首先?