LoginSignup
4
3

More than 5 years have passed since last update.

ど素人が C# で作られたサイトの dll を更新作業をした時のお話

Posted at

状況

サイト内でとあるベンダのサービスを利用していたが、サービスの仕様変更に伴って連携するためのモジュールを変更する必要があった。
その更新モジュールのうち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 では動かないらしい。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3