私はスタンドアローンのWinFormsアプリケーションを持っています。それを "プログラムA"と呼んでいます。プログラムAはユーザーがファイルを作成し、それに情報を保存します。プログラムAは公開クラスも公開しています。.NETアセンブリが「参照」されている場合のユーザースコープの設定はどうなりますか?
別のスタンドアロンWinFormsアプリケーション(「プログラムB」)は、プログラムAを参照し、いくつかの公開クラスを使用します。
しかし、プログラムAのクラスの中には、データを取得するために作成したファイルを開く必要があるものがあります。プログラムAでは、ユーザーのファイルの場所は「設定」(ユーザースコープの設定として)に保存され、My.Settings
で取得されます(これはVB.NETアプリケーションです)。
プログラムBが実行され、プログラムAのクラスを使用するときは、プログラムAのMy.Settings
から読み取る必要があります。設定は空白です。つまり、実行時と同じです最初のプログラム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()
を呼び出すとMy.Settings.UserFileName
は、ユーザーのファイル名が含まれていないので、それは何も返さない - より正確に、それはときにIDEに設定されている設定の「デフォルト」値は(だったものは何でも含まれています設定を最初に行ってください)。しかし、プログラムAを回して起動すると、ユーザーの設定がUserFileName
に記憶されます。
質問:参照アセンブリで関数を呼び出すと、なぜユーザーの設定が保持されないのですか?私が見ている振る舞いの説明があるのですか?または、おそらく私はちょうどこれすべての間違っているつもりだ、と私は最初の場所でMy.Settings
の何かに依存するプログラムAの公共クラスのいずれかを作ってはいけませんか?
アプリケーションの設定が本当に覚えていますか?あるいは、両方のアプリケーションでそれらを設定しましたか? –
これは本当にアプリケーションスコープの設定を記憶しています。 – Keithius