2017-10-12 16 views
2

I가 다음과 같은 구조의 닷넷 솔루션 :인증 코드 서명 - 단지 내 어셈블리에 서명

  • a.exe를
  • thirdParty.dll

I B.DLL Authenticode가 내 바이너리 (a.exe 및 b.dll)에 서명하기를 원합니다.

내가 현재 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의.

이제 가장 간단한 해결책은 bld에 대한 빌드 후 이벤트를 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 파일이 타사 라이브러리인지 알기에 충분히 똑똑하지 않기 때문에 그렇게해야합니다. –