私は Entity Framework の移行、SQL Server CE 4.0 を使用しており、Clickonce を通じて配布しています。
私app.config
の中では、datasource
ですDataSource=|DataDirectory|Mydb.sdf
。
<connectionStrings>
<add name="MyContext" connectionString="DataSource=|DataDirectory|Mydb.sdf" providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
Windows XP と Windows 7 に展開すると、データベースは次のように展開されます。
C:\Users\kev\AppData\Local\Apps\2.0\Data\8Y5K2R4J.AM9\Y3D5WADC.HAX\myapp..tion_ab2e572047b7b084_0001.0000_66744c6353cd31ca\Data
application(exe) directory
問題は、Windows 8 のスマート スクリーンでプロンプトが表示され、ユーザーが [続行] をクリックすると、データベースは上記の場所ではなく に作成されます。
上記のディレクトリにデータベースを作成するように明示的にclickonceに指示するにはどうすればよいですか?
これを見つけました:
Windows 8のスマートスクリーンのため動作しません。
http://support.microsoft.com/?kbid=920700
|データディレクトリ| 置換文字列のサポート |DataDirectory| (パイプ記号で囲まれている) は、データベース パスを示す置換文字列です。したがって、コードに絶対パスを含める必要はありません。コードにフル パスを含めると、データベースのフル パスが別の場所でシリアル化される可能性があるため、問題が発生する可能性があります。|データディレクトリ| また、置換文字列を使用すると、プロジェクトの共有とアプリケーションのデプロイが容易になります。
たとえば、コードに完全なパスを含めると、アプリケーションは次の接続文字列を持つことができます。
Data Source= c:\program files\MyApp\Mydb.sdf |DataDirectory| を使用する場合 置換文字列、アプリケーションは次の接続文字列を持つことができます。
データ ソース = |DataDirectory|\Mydb.sdf DataDirectory プロパティを設定するには、AppDomain.SetData メソッドを呼び出します。DataDirectory プロパティを設定しない場合、データベース フォルダへのアクセスに次のデフォルト ルールが適用されます。•ClickOnce で実行されているアプリケーションの場合、データベース フォルダーは、作成された特定のデータ フォルダーを使用します。注 .NET Compact Framework は、Microsoft Windows Mobile ベースのデバイスで AppDomain.SetData メソッドをサポートしていません。アプリケーションが Windows Mobile ベースのデバイスで AppDomain.SetData メソッドを呼び出すと、エラー メッセージが表示されます。