2009-04-09 4 views
0

私はスタンドアローンの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の公共クラスのいずれかを作ってはいけませんか?

+0

アプリケーションの設定が本当に覚えていますか?あるいは、両方のアプリケーションでそれらを設定しましたか? –

+0

これは本当にアプリケーションスコープの設定を記憶しています。 – Keithius

答えて

2

問題は、ユーザースコープの設定が実行中のアプリケーションによって読み取られることです。プログラムAのクラスは、プログラムBで読み取られなかった設定を取得しようとしています。

ポイントは、プログラムBには独自の設定がありますプログラムAとは別のクラスであり、プログラムBによって実行されているクラス(定義されている場所に関係なく)は、プログラムBの設定を使用します。

あなたの設定では、あなたは運がありません。

プログラムAとプログラムBの両方を制御する場合は、共通のユーザースコープ設定を共有できる両方のカスタム設定プロバイダを作成できます。

記事には、これを行う方法のセクションがあります。

+0

私はそれがそれのようなものであることを恐れていましたが、私は確かに分かりませんでした。それはバカだ。私は2つのプログラム間のデータ交換をどうやって再考する必要があるのでしょうか... – Keithius

+0

あなたの最善の策は、両方のアプリケーションに共有設定を認識させて、クラスにそれらの設定を取得させるのではなく、クラスに提供することですユーザー設定から – Randolpho

関連する問題