Linux环境下如何利用带密码pfx实现.NET程序集强名称签名
强名称签名解决方案(Linux DevContainer环境)
流程1:转换密钥并在.csproj中引用
- 从PFX提取密钥生成SNK文件
- 导出私钥PEM:
openssl pkcs12 -in aPasswordProtected.pfx -nocerts -out private.key -nodes -passin pass:你的密码 - 导出公钥PEM:
openssl pkcs12 -in aPasswordProtected.pfx -nokeys -out public.cer -passin pass:你的密码 - 合并生成SNK文件:
若sn -i private.key public.cer output.snksn命令无响应,改用mono sn.exe执行
- 导出私钥PEM:
- 修改项目文件引用SNK
在something.csproj中添加以下配置:<PropertyGroup> <SignAssembly>true</SignAssembly> <AssemblyOriginatorKeyFile>output.snk</AssemblyOriginatorKeyFile> </PropertyGroup> - 编译签名程序集
dotnet build
流程2:先编译未签名程序集再签名
- 编译未签名程序集
临时修改something.csproj关闭签名:
执行编译:<PropertyGroup> <SignAssembly>false</SignAssembly> </PropertyGroup>
未签名的dotnet build --no-restoresomething.dll默认生成在bin/Debug/netX.X/目录(X.X为你的.NET版本) - 生成SNK文件(同流程1的密钥提取步骤)
- 用sn工具签名程序集
若命令无效,改用sn -R bin/Debug/netX.X/something.dll output.snkmono sn.exe -R ...
流程3:直接用PFX一站式编译签名
该方式仅支持.NET Core 3.0及以上版本
- 修改
something.csproj添加签名配置:<PropertyGroup> <SignAssembly>true</SignAssembly> <AssemblyOriginatorKeyFile>aPasswordProtected.pfx</AssemblyOriginatorKeyFile> <DelaySign>false</DelaySign> </PropertyGroup> - 编译时传入PFX密码:
dotnet build /p:KeyPassword=你的密码
内容的提问来源于stack exchange,提问作者Sebastian Meine
相关产品推荐
相关产品推荐

