動的コンパイルを使用してASP.NETWebサイトプロジェクトを使用していますが、最近SQL Serverでバックアップされたセッション状態に移行し、奇妙なエラーが発生し始めました。私はこれを引き起こしている原因を理解しましたが、それを解決するための最良の方法がわかりません。
ローカルホストで再現する手順(SQLセッションを有効にした場合):
AppCodeで定義されたオブジェクトを配置し、それ
DanObject
がセッションにあるとしましょう。Session ["x"] = new DanObject();
(セッションはデータベースにシリアル化されます)
- アプリコードの何かを変更して、次のリクエストでサイトを再コンパイルします
- セッションにアクセスするすべてのページにリクエストを送信します
エラーは「アセンブリが見つかりません'App_SubCode_CS.rmdbqb81、Version = 0.0.0.0、Culture = neutral、PublicKeyToken=null'」です。
何が起こっているのかというと、AppCodeがコンパイルされるたびに、ランダムに名前が付けられたアセンブリに入ります。私のセッションが初めてシリアル化されたとき、AppCodeはたまたまAppCode_123という名前でした。アプリケーションを変更すると、AppCodeはAppCode_456になりました。ただし、データベースに保存されているセッションには、AppCode_123で定義されたオブジェクトがあります。セッションがDanObjectをバイナリ逆シリアル化しようとすると、AppCode_123が見つからないため、爆発します。
これを修正する最も簡単な方法は何ですか?
* Webアプリケーションへの切り替えとは言わないでください-私たちのコードベースは巨大であり、現時点では実行可能ではありません:)