【问题标题】:How do I strong name an assembly that is shared by several developers?如何强命名由多个开发人员共享的程序集?
【发布时间】:2023-04-05 07:50:01
【问题描述】:

我和我的同事有一个 C# 项目,必须使用regasm.exeRegistrationServices 向 COM 注册 Excel 互操作。因此,程序集必须使用强名称密钥进行签名。通过 Visual Studio 生成密钥文件并提交到源代码存储库。

每次新开发人员克隆 git 存储库时,他们必须转到项目属性的签名选项卡并重新输入 .pfx 文件的密码,或者在命令行上使用 sn.exe 重新输入密码。两者都不是理想的,因为两者都需要手动步骤和(简单,广为人知的)密码的口头交流。

我们尝试了delay signing 允许构建继续但不允许我们向 COM 注册的程序集。

有没有办法做到这一点,而无需强制每个人手动更新 .pfx 密钥文件?谢谢!

【问题讨论】:

    标签: .net com .net-assembly strongname delay-sign


    【解决方案1】:

    [ComVisible] 程序集需要强名称。 regasm.exe 的默认操作是假设您将程序集部署到 GAC 中。然而,这不是必需的,给它 /codebase 选项以在它所在的目录中注册它。通常是项目的构建目录。

    这也是 Visual Studio 在构建属性中勾选“注册 COM 互操作”选项时所做的事情。现在只需构建项目就足够了。请检查这是否仍然与您的安装程序兼容。存在 DLL Hell 含义,最好通过隔离解决。

    【讨论】:

    • 感谢您的回复。你是对的。重新读取 regasm.exe 输出,它是警告而不是错误,即:“RegAsm:警告 RA0000:使用 /codebase 注册未签名的程序集可能会导致您的程序集干扰可能安装在其上的其他应用程序旨在只能用于已签名的程序集。请为您的程序集提供一个强名称并重新注册。成功注册的类型"
    • 这是一个警告,但它清楚地表明“/codebase 开关仅用于已签名的程序集。”因此,接受错误并继续前进似乎很奇怪。
    【解决方案2】:

    如果您不担心有人盗用您的 .snk 并无益地使用它,您不必要求输入密码。无密码,无提示。

    【讨论】:

    • 谢谢...这有效。在通过单击 获得的“创建强名称密钥”对话框中,我必须取消选中“使用密码保护我的密钥文件”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    相关资源
    最近更新 更多