手動 SxS Execution
では、Zero Impact Deployment を維持しつつ、SxS Execution を実施するにはどうすればいいだろうか?
SxS 実行に必要な要素は、前回書いたように名前付けの設計とコードストーレジの提供である。アセンブリのロードまで手動で行うなどの方法もあるが、アプリケーション構成ファイルで個別コードベースを設定するのが一番手軽だと思われる。
アプリケーション構成ファイルのコードベース設定は、厳密名が存在しないアセンブリに対しては複数指定できないため厳密名は必須となる。たとえば、次のようなアプリケーション構成ファイルを作成するだけで SxS 実行されるので非常に手軽。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="SxSLib" publicKeyToken="b9874764550ab772" culture="neutral" /> <codeBase version="1.0.0.0" href="SxSLib1.dll"/> <codeBase version="2.0.0.0" href="SxSLib2.dll"/> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
上記の例では SxSLib というアセンブリのバージョン 1.0.0.0 とバージョン 2.0.0.0 を SxSLib1.dll と SxSLib2.dll という2つの DLL ファイルとして提供することで、同時に2つのバージョンを読み込めるように設定した場合。
href 属性は Zero Impact Deployment の仕様に従ってアプリケーションからみた相対パスを指定することしかできない。*1
テスト構成としては、
- SxSHost.exe (テスト用実行ファイル)
- SxSUser1.dll (SxSLib 1.0.0.0 を参照設定したクラスライブラリ)
- SxSUser2.dll (SxSLib 2.0.0.0 を参照設定したクラスライブラリ)
- SxSLib.dll (ver1.0.0.0 と ver2.0.0.0 の2つを作成)
となっていて、SxSHost.exe は SxSUser1.dll と SxSUser2.dll を参照設定している。
コードストーレジとなっているのは単純なファイルなので、SxSLib1.dll や SxSLib2.dll といった配置先(インストール先)のファイル名とアプリケーション構成ファイルの codeBase 属性を管理することが運用上必要な項目となる。