代码之家  ›  专栏  ›  技术社区  ›  Colonel Panic

publicsign做什么?

  •  1
  • Colonel Panic  · 技术社区  · 6 年前

    C#编译器的-publicsign选项做什么?

    我读了文件,但还是不明白 https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/publicsign-compiler-option

    此选项会导致编译器应用公钥,但不会对程序集进行实际签名

    什么公钥?如何应用?

    0 回复  |  直到 6 年前
        1
  •  5
  •   Koynov    5 年前

    在某些情况下,可能需要对程序集进行强名称- more on strong-naming and why you might need it

    无论程序集的命名会引入多强 some inconveniences 在你的发展过程中。要对程序集进行强命名,您需要访问公众&在构建期间使用私钥。

    像这样的工具 StrongNamer 对你的第三方未签名依赖关系有很大帮助。有助于解决强命名的病毒性特征。

    在某些情况下,您只希望组织中的少数个人(企业和OSS中的可能性较小,但仍有可能)能够访问私钥以进行验证 身份 集合的一部分。

    如果您不想公开(即在GitHub OSS中)或与整个开发团队(企业环境)共享私钥,但也不想干扰开发过程,那么在公开签名(在VS 2015 Update 2编译器中引入)之前,您只有一个选项—— delay-sign 你们的集会。

    延迟对程序集进行签名仍然会在开发过程中引入一些摩擦,比如在对私钥(最终是程序集标识)进行估值时。每个需要构建和运行该程序集的人都必须注册该程序集,以便在运行时跳过程序集验证(使用具有管理员权限的“sn–Ì”Vr myAssembly.dll命令)。

    到达终点 Public Signing 方法这似乎是延迟签字的另一种方式。因此,对程序集进行公共签名与延迟签名是一样的,但是开发团队不需要在他们的机器上执行“sn Vr myAssembly.dll”命令。然而,它也有一些局限性:

    在上调试和测试公共签名程序集时出现的已知问题 .NET Framework:

    • 您将无法将程序集安装到全局程序集缓存(GAC)
    • 您将无法在启用卷影复制的AppDomain中加载程序集
    • 您将无法在部分受信任的AppDomain中加载程序集

    *关于组装的说明 身份 : 强命名是为了程序集标识,而不是安全性。强命名(完全签名)程序集将经受验证检查(即“sn-vf myAssembly.dll”),这将验证程序集及其所有内容是否与签名时一样。

    这不是一个安全问题,因为至少在某些上下文中,绕过运行时程序集加载特定程序集的强名称验证是相当容易的。