最近、コード署名証明書を購入し、自動ビルドにコード署名ステップを組み込んでいます。
ビルド スクリプトは VB6 プロジェクトと .NET プロジェクトの両方をビルドする必要があるため、現在、すべてをビルドするバッチ ファイルがあります。.NET プロジェクトの場合、ビルド スクリプトは MSBUILD を呼び出し、ビルドするソリューション ファイルを渡します。これらのソリューションのプロジェクトにはいくつかのサードパーティの依存関係があり、これらのファイルはすべて、アプリケーションを実行するために必要であるため、 [参照設定] で [ローカルにコピー] オプションがオンになっています。さらに、一部のプロジェクトは COM Interop を使用するため、相互運用アセンブリ ( Interop.MSXML2.dllなど) が自動的に生成され、ビルド中に出力フォルダーにもコピーされます。
各アセンブリで個別にsigntool.exeを呼び出さなくても、ビルド中にコンパイルされたファイル (つまり、アセンブリ) にコード署名し、サードパーティのライブラリと相互運用アセンブリを無視するだけの簡単なコードを見つけようとしています。 .
現在、ビルドスクリプトで次のことを行うことで、これを回避しました。
- ビルドが以前にビルドされたすべてのファイルをクリーンアップすることを確認してください
- ビルドの出力フォルダーを指定して、MSBUILD で .NET ソリューションをコンパイルします。
- signtool.exeを使用して、出力フォルダー内のすべてのバイナリ (EXE、DLL、OCX) に再帰的に署名します。これにより、サードパーティのライブラリや自動生成された Interop アセンブリなど、すべてに署名されます
- 私のサードパーティの依存関係は別の
lib
フォルダーにあるため、すべてのファイルをlib
ビルド出力フォルダーにコピーして、ビルドがそこにコピーしたコピーを上書きします。このようにして、これらのファイルは署名されなくなりますが、アセンブリはまだ署名されています
私の質問は、これを行うためのより良い方法はありますか? 私が考えることができる他の唯一の代替手段は、署名が必要な各アセンブリで個別にsigntool.exeを呼び出すことですが、プロジェクトの数とそれらで発生する変更の量 (アセンブリの名前が変更され、移動され、取得される) のために、これは苦痛になる可能性があります。プロジェクトが進展するにつれて削除されます)。さらに、特定のアセンブリが署名されているかどうかを推測する必要がないため、ファイルをループして一括で署名することが最も理にかなっています。
ただし、同時に、コード署名証明書を使用して作成していないファイルに任意に署名することは (道徳的、法的、またはその他の点で) 適切ではないようです。
それとも、私はこれについて完全に間違った方法で進んでいますか?