4

データベースのパス(いくつかのxmlファイルを含むフォルダー)をapp.configに保存します。起動時に、パスが存在するかどうかを確認します。存在しない場合は、パスをデフォルトのパスに設定したいと思います。コードは次のようになります。

public void CheckAndRepairSettings()
{
        /* Check Paths */
        if(GetDatabasePath() == null)
             SetDatabasePath(System.AppDomain.CurrentDomain.BaseDirectory + "DataBase");
}

GetDatabasePath()app.configからパスを読み取り、app.configSetDatabasePath()にパスを書き込みます。これらのメソッドは正常に機能しています。

私の問題はSystem.AppDomain.CurrentDomain.BaseDirectoryです。これをアプリケーションのデバッグモードで実行すると、次のようになります。 "F:\ Office \ Project_Software \ ServiceTool \ _Work \ ServiceSoftware \ ServiceSoftware \ bin \ Debug \"

さらに、いくつかの単体テストにNUnitを使用します。NUnitをデバッグモードで実行すると、次のようになります: "F:\ Office \ Projekte_Software \ ServiceTool \ _Work \ ServiceSoftware \ ServiceSoftware.UnitTests \ bin \ Debug"

NUnitデバッグモードのパスには末尾の円記号"\"がないため、のパス文字列を連結すると、存在しないパスが取得されますCheckAndRepairSettings()

なぜこれがそれほど異なる動作をするのですか?

4

2 に答える 2

6

Path.Combine を使用してパスを連結する必要があります。これは、既存/存在しない (とりわけ) パスセパレーターに関する問題を処理します。

1 つに末尾のスラッシュが含まれている理由と、もう 1 つに含まれていない理由は、おそらく、nUnit がテストを実行する appdomain を作成する方法に関連しています。

于 2012-07-30T11:34:44.783 に答える
-1

より良いオプションは、IsolatedStorage!を使用することです。

たとえば、これを使用して設定を書き込むことができます。

using(IsolatedStorageFile f=IsolatedStorageFile.GetUserStoreForDomain())
{

using(var s=new IsolatedStorageFileStream("Myapp.config",FileMode.Create,f))
using(var writer=new StreamWriter(s))
writer.WriteLine("My Settings");
}
于 2012-07-30T11:40:21.973 に答える