2009年7月9日木曜日

[VC++] ミニメモ

自分で作ったnamespaceやclassの「名前空間が見つかりません」のエラーが出たときは、一番最後のエラーメッセージを見よ。

どこかでnamespaceを閉じ忘れているかも…。

2009年7月6日月曜日

[VC++2008] VC++ 2008 Expressでアセンブリに署名をする

VC++ 2008 Expressでアセンブリを遅延署名をしてから、署名する方法です。署名をするためのキーについては、ドキュメントの「公開キーと秘密キーのキー ペアを作成する 」や「厳密名ツール (Sn.exe) 」についてを参照してください。

遅延署名をする

assemblyInfo.cppに遅延署名をするアトリビュートを追加します。ここでは、「AssemblyKeyFileAttribute」の指定はしません。

[assembly:AssemblyDelaySignAttribute(true)];

リンカオプションでパブリックキーを設定する

要するに「/KEYFILE:」のオプションを設定するのですが、プロジェクトのプロパティで「リンカ」の中の「詳細」の一覧の中に「キーファイル」という項目があるので、そこに公開キーファイルを指定します。ファイルのありかによっては、マクロを使ってパスを設定する必要があるかもしれません。

ちゃんと署名をする

遅延署名のままだとデバッグすらできません。デバッグなら一時的に署名のチェックを外すこともできますが、リンクが終わった後に署名します。
カスタムビルドステップで、コマンド(sn.exe)を使って署名をします。基本的には以下のようにコマンドビルドステップのコマンドラインを設定すればよいでしょう。

"$(WindowsSdkDir)bin\sn" -R "$(TargetPath)" <キーペアファイル>

なお、キーペアファイルの指定でフルパスになるようでしたら、二重引用符「"」でくくる必要があります。