📖
ど素人が C# で作られたサイトの dll を更新作業をした時のお話
状況
サイト内でとあるベンダのサービスを利用していたが、サービスの仕様変更に伴って連携するためのモジュールを変更する必要があった。
その更新モジュールのうち1つが、サイトの基盤部分でも使用している dll ファイルだった。
該当の dll を新しくするとサイト自体が死に、dll を前のままでやるとサービス連携部分が死ぬという状態。
正攻法と思われるもの
dll を新しくした上で、サイト自体をリビルドする。
それを行えなかった理由
ビルド前のソースコードがなかった。
ビルドが行われたのが3年近く前で、担当が何人も入れ替わっていた上に全員退職済みだった。
(ソースは会社の財産だってことをもっと認識してほしい)
解決方法
Web.config
に設定を追加し、古いバージョンが要求された場合は別のディレクトリに配置した dll を参照するようにした。
記述
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="[dllの名前]" publicKeyToken="dllの署名" culture="neutral" />
<codeBase version="[古いdllのバージョン]" href="[参照させたいdllの場所]" />
<publisherPolicy apply="no" />
</dependentAssembly>
</assemblyBinding>
</runtime>
どういうこと?
アセンブリバージョンのリダイレクトとかいう機能らしい。
厳密名を使わない場合は強制的に別バージョンの dll を参照させることができるらしいけど、今回は厳密名を利用していたため、別のディレクトリに配置した dll を利用するような設定を行った。
詳しくは MSDN 参照で。
注意
古い .NetFramework では動かないらしい。
Discussion