Visual Studio 2012 SDK 中的默认 VSPackage 模板会生成一个使用强命名的项目。
因为强命名是可传递的,这意味着我添加的任何引用(例如,同一解决方案中的另一个项目,或第三方依赖项)也需要强命名。
由于我对强命名第三方依赖项感到不舒服,我更愿意从我的 VSIX 中删除强命名。
这样做有什么缺点?
Visual Studio 2012 SDK 中的默认 VSPackage 模板会生成一个使用强命名的项目。
因为强命名是可传递的,这意味着我添加的任何引用(例如,同一解决方案中的另一个项目,或第三方依赖项)也需要强命名。
由于我对强命名第三方依赖项感到不舒服,我更愿意从我的 VSIX 中删除强命名。
这样做有什么缺点?
如果您已经可以部署 VSIX 并且不需要 GAC 中的任何内容,那么不需要,Visual Studio 不要求您进行强名称签名。我相信模板向导确实需要强名称签名,但这只是因为它们必须安装到 GAC 中。
我可以想到一些你可能想要的原因:如果你的包暴露了其他扩展使用的公共 API,那么你可能引用了一个公共 DLL 作为其他人使用你的公共 API。您可能希望对公共接口二进制文件进行强名称签名,并且根据您的项目设置方式,您可能必须对所有内容进行强名称签名。
此外,如果您没有使用强名称符号,则确实存在与另一个扩展名发生名称冲突的风险。如果您创建了一个名为“Package.dll”的 DLL,而另一个扩展也这样做了,并且你们都没有对二进制文件进行强名称签名,那么 CLR 可能会在这里感到有些困惑。因此,如果您不是强名称签名,请确保您的程序集名称“足够独特”以避免这种风险。
值得一提的是,当我们在内部测试 Roslyn 语言服务时,我们只需安装一个包含所有 Roslyn 位的 VSIX 即可。快速浏览源代码控制历史意味着我们在第一年半的时间里没有对我们的包二进制文件进行强名称签名,直到我们最终不得不作为从 Microsoft 运送代码的过程的一部分。