2017-10-12 10 views
2

I持って次のような構造を持つ.NETソリューション:のAuthenticode署名 - 唯一の私のアセンブリに署名

  • A.EXE
  • thirdParty.dll

I B.DLL私自身のバイナリ(a.exeとb.dll)だけにAuthenticodeに署名してほしい。

私は現在A.EXEためのcsprojファイルのビルド後のイベントがあります

"C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe" sign /t http://timestamp.globalsign.com/scripts/timestamp.dll /a $(TargetPath) 
for %%f in ("$(ProjectDir)$(OutDir)*.dll") do "C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe" sign /t http://timestamp.globalsign.com/scripts/timestamp.dll /a $(TargetPath) %%f 

しかし、これはすべてのDLLのを含めthirdParty.dllに署名し、また、任意に署名しようとしているのリスクを実行します管理されていないDLLです。

ここで最も簡単な解決策は、ビルド後のイベントをb.dllのcsprojファイルに置き、上記のforループを削除することです。しかし、実際には、アセンブリが多く、さらに多くのアセンブリが追加される可能性があります。私はAuthenticodeにポストビルドステップを追加して、新しいアセンブリに署名することを覚えている他の開発者に頼っていません。

hereで説明したPowerShellスクリプトを使用して、マネージアセンブリのみに署名することはできますが、それでも上記の例ではthirdParty.dllに署名します。

自分のコードを含むアセンブリだけを列挙して署名するにはどうすればよいですか?

答えて

0

自分のコードを含むアセンブリだけを列挙して署名するにはどうすればよいですか?あなたはthirdParty.dllを除外するために、あなたのループ文で「if..else if」を使用することができ

これをテストするために、私は、ビルド後のイベント以下に試験サンプルを作成しました:

for %%f in ("$(ProjectDir)$(OutDir)*.dll") do (if not "%%~nf"=="thirdParty" (echo %%~nf)) 

することができますあなたの記号コマンドを使用してください:

"C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe" sign /t http://timestamp.globalsign.com/scripts/timestamp.dll /a $(TargetPath) 

の代わりに、テストコマンドecho %%~nf

for %%f in ("$(ProjectDir)$(OutDir)*.dll") do (if not "%%~nf"=="thirdParty1" (if not "%%~nf"=="thirdParty2" (echo %%~nf))) 

・ホープ、このことができます:あなたが除外される必要があり、複数のthirdParty.dllファイルがある場合

ほかに、あなたが重畳ifステートメントを使用することができます。

+0

ありがとうございますが、複数のサードパーティライブラリに依存しています。このソリューションは、新しいライブラリごとにポストビルドスクリプトを手動で更新することを覚えておく必要があるのと同じ問題を効果的に持っています。 – Tom

+0

@Tomの場合、新しいライブラリごとにではなく、サードパーティの新しいライブラリのポストビルドスクリプトを手動で更新することを忘れないでください。 Visual Studioは、どのDLLファイルが第三者のライブラリであるかを知るのに十分スマートではないため、そうする必要があります。 –

関連する問題