misc.log

日常茶飯事とお仕事と

log4netを、厳密名付きで.NET Framework2.0用にビルドする

時間が無いのでメモだけ。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を選択し、ビルドし直すとエラーは消えました。