Visual Studio Extensions(VSIX)需要强名吗?

Rog*_*mbe 9 strongname visual-studio-sdk

Visual Studio 2012 SDK中的默认VSPackage模板生成一个使用强命名的项目.

因为强命名是可传递的,这意味着我添加的任何引用(例如,同一解决方案中的另一个项目,或第三方依赖项)也需要强名称.

由于我不觉得强烈命名第三方依赖,我宁愿从我的VSIX中删除强命名.

这样做的缺点是什么?

Jas*_*ski 3

如果您已经可以部署 VSIX 并且不需要 GAC 中的任何内容,那么不需要,Visual Studio 不要求您进行强名称签名。我相信模板向导确实需要强名称签名,但这只是因为它们必须安装到 GAC 中。

我可以想到一些你可能想要的原因:如果你的包公开了其他扩展使用的公共 API,那么你可能会引用一个公共 DLL,就像其他人使用你的公共 API 一样。您可能希望对公共接口二进制文件进行强名称签名,并且根据项目的设置方式,您可能必须对所有内容进行强名称签名。

此外,如果您没有使用强名称签名,则确实存在与其他分机名称冲突的风险。如果您创建了一个名为“Package.dll”的 DLL,并且另一个扩展也创建了该 DLL,并且双方都没有对二进制文件进行强名称签名,那么 CLR 可能会在这里感到有点困惑。因此,如果您没有强名称签名,请确保您的程序集名称“足够唯一”以避免这种风险。

无论如何,当我们在内部测试 Roslyn 语言服务时,我们只需安装包含所有 Roslyn 位的 VSIX 即可。快速挖掘源代码控制历史意味着我们在头一年半的时间里没有对我们的软件包二进制文件进行强名称签名,直到我们最终不得不作为从 Microsoft 发送代码的过程的一部分。