【发布时间】:2014-03-26 11:08:00
【问题描述】:
Microsoft 代码分析鼓励我为所有程序集命名。但根据微软I have to manually disable the "Bypass Feature" that they are checked。
因此,自 .NET Framework 3.5 版 Service Pack 1 起,强名称未经过验证。
为什么我仍应使用强名称签署我的程序集?
谢谢! 斯蒂芬
【问题讨论】:
标签: .net strongname
Microsoft 代码分析鼓励我为所有程序集命名。但根据微软I have to manually disable the "Bypass Feature" that they are checked。
因此,自 .NET Framework 3.5 版 Service Pack 1 起,强名称未经过验证。
为什么我仍应使用强名称签署我的程序集?
谢谢! 斯蒂芬
【问题讨论】:
标签: .net strongname
因此,自 .NET Framework 3.5 版 Service Pack 1 起,强名称未经过验证
好吧,作为一个实际上并不真实的笼统陈述。部分正确,如果应用程序在完全信任下运行,则它们不再经过验证 程序集存储在受信任的位置。本地机器或 Intranet 区域。
在构建时,您不知道程序集最终将存储在哪里。您可能有一个部署计划,但这样的计划往往会在方便或必要时被否决。这包括当您需要将程序集存储在 GAC 中时需要一个强名称。可能是 DLL Hell 问题的解决方法,这可能需要在 年 之后完成。
由于您没有对程序集进行强命名,因此无法使用诸如此类的解决方案,这很不方便。到那时几乎总是为时已晚,因为它需要重建一切。强命名非常简单,几乎没有充分的理由跳过它。或者,如果您不同意该消息,则直接隐藏该消息,代码分析规则确实符合“您考虑过这个吗?”警告类别。对晦涩细节的温和提醒。
【讨论】:
如果您不关心恶意更改(或其他格式错误)的可执行代码的可能性,那么使用强名称的另外两个原因是(1)版本控制(例如 DLL 地狱问题)和(2)命名保护(即不相关的代码恰好与您的程序集具有相同的名称)。
此外,您提到的绕过功能是一种性能黑客,它利用假设来(希望总是安全地)跳过完整性检查(恶意或格式错误的代码检测)步骤。
值得一读:http://msdn.microsoft.com/en-us/magazine/cc163583.aspx 和 http://www.codeproject.com/Articles/8874/Strong-Names-Explained
【讨论】: