質問

シンプルな永続化レイヤーを必要とするデスクトップアプリを書いています-SubSonicと、SQLiteで動作する機能があることがわかりました。ただし、データベースファイルをユーザーのAppDataフォルダーに保存する必要があり、そのような値をapp.configに入れる方法がわかりません。絶対パスを使用したくありません。

app.configは何らかの方法で環境変数にアクセスしたり、アプリケーションデータフォルダーを参照したりできますか?

役に立ちましたか?

解決

接続文字列にapp.configのAppDataフォルダーを指定する方法はありません。

ただし、インストール中またはアプリケーションの初回実行時に、構成ファイルに値を書き込むことができます。

他のヒント

subsonic v2.xの場合、app.config接続文字列を無視し、データベースで作業する前に実行時に設定するだけです。プロバイダー名はもちろん同じままです。

string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"MyApplication\Northwind.db3");

DataService.Providers["Northwind"].DefaultConnectionString =
            String.Format(@"Data Source={0};Version=3;New=False;Connection Timeout=3", dbPath);

「フレームワークの方法」 appdataを見つけるには、Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)を使用します

これは、プラットフォームに関係なく正しいappdataパスを見つけます。

いずれかの言語でASP.NETを使用している場合、いくつかの方法があります

Server.MapPath("〜")は、アプリケーションのルートをフルパス名として返します。その後、「/ app_data」を追加するだけです。完全なパスを取得するために。

代わりにHttpContext.Current.RequestおよびHttpContext.Current.Applicationを検査します 同じフォルダーを提供する多数の(そして今述べたものよりもはるかに優れた)プロパティがあります-フルパスとしてアプリケーションのルートになります。

アプリケーションが仮想フォルダーとしてあり、アプリケーションを含む通常のフォルダーがそのフォルダー上のIISで構成されている場合でも、これらはすべて機能することに注意してください

ただし、これは実行時にのみ可能であるため、app.configで実際に言及することはできません。 app.configが常駐するIE" ../ App_Data"からの相対パスを使用してみてください。または" / App_data"しかし、あなたが正確な要件であるかどうかはわかりません。

幸運

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top