gpt4 book ai didi

c# - Authenticode signing - 只签署我的程序集

转载 作者:行者123 更新时间:2023-11-30 18:16:21 25 4
gpt4 key购买 nike

我有一个具有以下结构的 .Net 解决方案:

  • a.exe
  • b.dll
  • 第三方.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 以签署任何新程序集。

我可以使用描述的 PowerShell 脚本 here仅签署托管程序集,但在上面的示例中仍会签署 thirdParty.dll。

我如何枚举和签署包含我自己的代码的程序集?

最佳答案

How do I enumerate and sign just the assemblies containing my own code?

您可以在循环语句中使用“if..else if”来排除 thirdParty.dll:

为了对此进行测试,我使用以下构建后事件创建了测试示例:

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

此外,如果你有多个需要排除的thirdParty.dll文件,你可以使用叠加的if语句:

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

希望这对您有所帮助。

关于c# - Authenticode signing - 只签署我的程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46707529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com