日経BP社 ブックス&テキスト Online

「マイクロソフト関連書」「Autodesk公式トレーニングガイド」「MOS攻略問題集」「セミナーテキスト」「スクール標準教科書」などの各シリーズ、各種IT関連書籍をご案内するサイトです。

書籍訂正情報

『.NETエンタープライズWebアプリケーション開発技術大全Vol.4 セキュアアプリケーション設計編』をお買い上げの方へ

本書の内容に誤りがございました。以下の通り、お詫びして訂正いたします。

■p.200〜201 「6.5.4 厳密名とアセンブリとGACの関係」について

「6.5.4 A.GACと厳密名の関係」の解説の中で、「厳密名が付与されている場合には必ずGACに登録しなければならない、というわけではない」という表記がありますが、ASP.NETランタイム(バージョン1.0/1.1)の場合には、必ずGACに登録しなければなりません。厳密名つきアセンブリファイルをローカルアセンブリファイルとして取り扱うことは、ASP.NET 1.0/1.1ではサポート対象外となっています。

このため、表6-3には以下のような注記が必要となります。

アセンブリの利用形態 GACに当該アセンブリのコピーを持たせ、複数のアプリケーションから利用させたい場合 GACに入れず、各アプリケーションごとにローカルコピーを持たせて使わせたい場合
厳密名の付与 必須(=絶対に付けなければならない) 任意(=付与してもしなくても構わない)
※ ただし ASP.NET 1.0/1.1 では仕様制約のため厳密名を付与してはいけない
呼び名 グローバルアセンブリ ローカルアセンブリ
配置場所 GAC(C:\WINDOWS\assembly)下に配置し、各アプリケーションごとには配置しない Webアプリケーションであればbinディレクトリ下、非Webアプリケーションであればexeと同一ディレクトリ下に配置する
(正) 表6-3 アセンブリファイルの2つの利用形態

技術的な理由を以下に補足します。
この制限事項は、ASP.NETランタイムの仕様(アセンブリファイルのローディングポリシ)によって発生しています。ASP.NET 1.0/1.1が厳密名つきアセンブリファイルを読み込む際、ASP.NETランタイムはそのアセンブリファイルを必ずドメイン中立としてロードします。このため、厳密名つきアセンブリファイルをGACに入れずにローカルアセンブリとして取り扱うと、アプリケーションリスタート時に稀にファイルロックの残留に伴うエラーが発生したり、CASによるトラブルが発生したりすることがあります。
発生する具体的なトラブルとしては、以下のような場所に情報がまとめられていますので、参考にしてください。

PRB: "Can not Access File 'AssemblyName' Because It Is Being Used by Another Process" Error Message in ASP.NET (http://support.microsoft.com/default.aspx?scid=kb;en-us;324519)
PRB: "Access Denied" Error Messages When You Do Not Put Strong-Named Assemblies in the Global Assembly Cache (http://support.microsoft.com/default.aspx?scid=kb;en-us;813833)
Improving Web Application Security: Threats and Countermeasures, Chapter 7, Building Secure Assemblies "ASP.NET and Strong Names"
(http://msdn.microsoft.com/library/en-us/dnnetsec/html/THCMCh07.asp)

この制限はあくまでASP.NETランタイムの仕様によるものであるため、コンソールアプリケーションやWindowsアプリケーションなどには当てはまりません。また、次期バージョンのASP.NET 2.0では改善が図られる予定です。

なお、開発中に厳密名つきアセンブリファイルを取り扱う場合には不便が生じることもありますが、このような場合にはVC++のビルドアクションを活用し、ビルド時に自動的に厳密名つきアセンブリファイルをGACに登録するように構成すると便利です。詳細な手順に関しては本シリーズVol.5「トランザクション設計編」 6.3.4 「COM+カタログ及びGACへの登録とアセンブリファイルのバージョニング」などをご参照ください。
訂正INDEXページへ戻る>>