時間が無いのでメモだけ。log4net.dllをGACに登録する必要が出てきたため、厳密名付きのlog4netを作成します。同じ作業は、.NET Framework 1.1の時に行いました(http://d.hatena.ne.jp/frontline/20051013/p2 参照)。ただし、今回はフレームワーク自体のバージョンも変わっている上、ちょっとソリューション構成も違っているので慎重に作業する必要がありました。
ソースと変換処理
log4netのソースは、ダウンロードしたlog4netのファイル一式に含まれているので、それをVisual Studioで開きます。今使っているのはVisual Studio 2010なので、「変換しますか?」とのメッセージが出ましたが、変換を行うと「問題はありませんでした。」という「警告」だけが出るという結果だったことから、おそらく互換性面での問題は無いと思われます。
フレームワークバージョンの指定
次に、プロジェクトプロパティのビルド設定で、条件付きコンパイルシンボルを「NET_1_0」→「NET_2_0」と変更します。今回使うライブラリは.NET Framework 2.0を想定していることから、このように書き換えました。このコンパイルシンボルの選択については、どこかにドキュメントがあるのかも知れないけれど、log4netソースの「AssemblyInfo.cs」にコンパイルディレクティブのIF文で、プロパティに埋め込む文字列を切り替えているところがあるので、そこから「log4net for .NET Framework 2.0」を指定している条件を見つけて設定しています。
この部分ですが、Net_1_0でソースを検索すると、このコンパイル条件を利用しているのは
- DLLのプロパティに表示される文字列を切り替えるところ。
- 署名作成のためのキーペアファイルを、AssemblyInfoの中で固定指定するかどうか(Visual Studio 2005以降はどうやらプロジェクトのプロパティ内で設定するので、AssemblyInfoは見ないみたい…)。
だけのようです。それも、NET_1_0指定状態で、プロジェクトのプロパティからキーペアファイルを指定しても、警告はでますがビルドはとおります。というわけで、具体的なロジックや参照するライブラリが何か切り替わる、というものではないように思えます(それ以上の確認は未実施)。
署名の設定
署名については、あらかじめ「sn.exe -k キーファイル名.snk」というコマンドで作成しておいたキーファイルをプロジェクトから参照できる場所に配置し、Visual Studioのプロジェクトプロパティ画面、「署名」タブからファイルを指定します。ファイルを指定しただけでは厳密名は付きません。ビルドする必要があります。
ビルド
ここまでの作業で、.NET Framework 2.0用にlog4netを厳密名を付けてビルドできるはずですが、実際にビルドしようとすると
C:\(中略)\log4net\Config\XmlConfigurator.cs(158,42): エラー CS0234: 型または名前空間名 'ConfigurationManager' は名前空間 'System.Configuration' に存在しません。 アセンブリ参照が不足しています。
というエラーが出ました。この件について調べたところ、以下のサイトが引っかかりました。
- Looking for the new ConfigurationManager?
- http://weblogs.asp.net/scottcate/archive/2005/06/13/Looking-for-the-new-ConfigurationManager_3F00_.aspx
上記サイトによると、ConfigurationManagerが新しくなっており、このため、参照を追加しないといけないようです。初期状態では、プロジェクトの参照設定にSystem.Configurationが無かったので、参照追加で「.NET」のタブからSystem.Configurationを選択し、ビルドし直すとエラーは消えました。