|DataDirectory|
構成設定からのものではありません。あなたは3つの異なるものを混ぜ合わせています:
ConfigurationManager.AppSettings["DataDirectory"]
これは構成設定に由来します。作成してプロジェクトに配置する必要のある.configファイル。この特定の設定は、要素にキー"DataDirectory"
がある要素の値ですAppSettings
。これは、.configファイルに配置しない限り存在しません。通常、これは変更されない構成または起動データを配置する場所です。ファイルパスは、ユーザーがデータベースをインストールするマシンによって異なる可能性があるため、ここに配置しないでください。
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
これは、アプリがインストールされているオペレーティングシステムによって定義された現在のユーザーのローミングアプリケーションデータフォルダーへのパスです。これは変更できません。OSによって定義されています。このフォルダはユーザーが書き込み可能であり、ユーザーがアプリケーションをアンインストールしても削除されず、ユーザーが別のマシンからローミングまたはログオンした場合に使用可能になることを確認できます。これは通常、編集可能なアプリケーションデータを配置する場所です。
SqlConnection("Data Source=|DataDirectory|DatabaseFileName.sdf;...")
これは、ADO.NET接続の接続文字列です。ADO.NETは垂直バーを特別に扱い、垂直バー間のキー名に一致するAppDomainデータを検索します。次の方法で同じデータを取得できます。
AppDomain.CurrentDomain.GetData("DataDirectory")
では、何がの値を書き込むのDataDirectory
でしょうか?これは、実行可能ファイルをデプロイするものによって実行されます。
- .MSIインストーラーは、それをアプリのターゲットフォルダーとして定義します。
- ClickOnceは、プロジェクトに特別なデータフォルダを定義します。
- WebアプリはApp_Dataフォルダーを使用します。
- VisualStudioデバッガーはデバッグフォルダーを使用します。
.MSIインストーラーを使用すると、ユーザーがDataDirectoryを変更できることに注意してください。DataDirectory
これが、アプリケーションデータが展開された場所を見つける方法がない場合に、ハードコーディングまたは変更してはならない理由です。通常、このDataDirectory
フォルダーは、実行可能ファイルとともにデプロイされた読み取り専用のバイナリデータ用に使用します。
実行可能ファイルとともにデプロイされたデータに書き込む必要がある場合は、最初に、ユーザーがに書き込むことができることがわかっている場所にデータをEnvironment.SpecialFolder.ApplicationData
コピーし、コピーに書き込む必要があります。DataDirectory
ユーザーが必ずしも書き込み可能であるとは限らないだけでなく、デプロイメントの一部であり、ユーザーデータの一部ではありません。実行可能ファイルを修復またはアンインストールすると、DataDirectory
再インストールまたは削除されます。データを削除するとき、ユーザーはそれを気に入らないので、に保存しないでくださいDataDirectory
。