我希望通过interop强引用一个托管应用程序,该应用程序引用许多托管程序集和ActiveX和COM组件(用C ++编写)。并且因为一个强名称的程序集不能引用弱命名的程序集,你能不能告诉我我应该准备什么问题,你遇到了什么,特别是在处理那些ActiveX和COM interops时?
此应用程序的解决方案很大。它由50多个托管C#,Vb.net,本机C ++和托管C ++ / CLI项目组成。因此,您提供的信息越多,现实生活中的故事越多,我就越能做好准备并避免头痛。
感谢。
答案 0 :(得分:1)
答案 1 :(得分:1)
除了可靠地存储.snk文件之外,确实没什么问题。
请记住,将使用您的程序集的每个第三方程序集都将具有依赖项中提到的assmeblies中的密钥,并且每次加载程序集时,它将检查加载的程序集是否仍使用该密钥签名。这样做是为了防止一些恶意代码错误地放置您的程序集。
这意味着除非您可靠地存储用于签署程序集的早期版本的.snk文件,否则您将无法在不强制用户重新添加引用的情况下发布新版本。因此,存储.snk文件并对任何给定程序集的每个版本使用相同的文件。是否为不同的程序集使用不同的.snk文件或者对所有程序集使用不同的文件并不重要,因此每个公司只需一个.snk即可。
有关上述内容的详情,请参阅this question和this perfect answer。
答案 2 :(得分:1)
到目前为止,我还没有遇到任何与强名称相关的问题(也使用COM互操作程序集)。如果你得到一个没有强名称的第三方程序集,你可以自己进行签名,这样你就可以使所有的程序集都具有很强的名称。
当然,使interop程序集强名称不会保护要修改或替换的底层COM DLL,因此强名称的“保护”并不会真正扩展到COM组件上,即使是互操作汇编被强烈命名。