如何在 Linux 中为强命名程序集创建 .NETCore 的 snk

Posted

技术标签:

【中文标题】如何在 Linux 中为强命名程序集创建 .NETCore 的 snk【英文标题】:How to create a snk for .NETCore in Linux for Strong Named Assemblies 【发布时间】:2018-09-05 11:18:23 【问题描述】:

我使用 CentOS 7 使用 JetBrains Rider IDE 编写 .NETCore 服务器。

我需要为 .NETCore 2.0 创建一堆强命名程序集(库项目)。我知道在 Windows 上我可以使用sn.exe 工具来创建snk 密钥文件。谁能详细说明如何在 CentOS 机器上执行此操作?

我找到了一个也称为 sn (see man page) 的单声道二进制文件,它似乎是 sn.exe 等价的,但它似乎很老了(2003 / 2004),我不确定,如果它是工具一应该使用TODAY

我还需要与官方(来自商业供应商)code signing certificate签署一些 DLL。我不明白snk 文件和我获得的证书之间的关系(它有一个p12 扩展名)。

通过一点研究,我读到,在我的 .csproj 文件中,我需要将以下标签添加到建议 MSBUILD 以创建强命名程序集:

<AssemblyOriginatorKeyFile>MyKey.snk</AssemblyOriginatorKeyFile>
<SignAssembly>True</SignAssembly>

如果有人能解释如何(在CentOS 7 以.NetCore 2.0 为目标),我将不胜感激:

    创建强命名程序集

    使用现有商业证书签署程序集

请注意,我没有使用 VisualStudio(您有 UI 工具)!

【问题讨论】:

【参考方案1】:

sn -k sgKey.snk

https://docs.microsoft.com/en-us/dotnet/framework/app-domains/how-to-create-a-public-private-key-pair

它适用于 Linux。应该安装单声道。尝试使用 .Net Core 2.2


一些有用的命令:

创建密钥对:sn –k private.snk

提取公钥:sn –p private.snk public.snk

查看公钥和公钥令牌:sn –tp public.snk

查看程序集的公钥和公钥令牌:sn –Tp assembly.dll

从程序集中提取公钥:sn –e assembly.dll public.snk

验证程序集是否已签名以及使用什么密钥:sn –vf assembly.dll

显示注册跳过验证的机器上的程序集列表:sn –Vl

注册程序集以跳过验证:sn –Vr * (must elevate)

使用密钥对退出程序集:sn –Ra assembly.dll private.snk

【讨论】:

以上是关于如何在 Linux 中为强命名程序集创建 .NETCore 的 snk的主要内容,如果未能解决你的问题,请参考以下文章

在 .fsproj 中为 .NET 核心指定程序集版本

在 Python scikit learn 中为 12 个随机森林创建循环

我可以在 Windows 中为 Linux 平台创建应用程序吗?

如何在 VB.NET 中为基于 Windows 的应用程序创建带有自动建议的文本框?

如何在 Meteor 中为全局变量创建自己的命名空间?

VB.Net 中的类命名决策