C# 我如何知道我的应用程序加载了正确的程序集?

C# 我如何知道我的应用程序加载了正确的程序集?,c#,.net,.net-assembly,C#,.net,.net Assembly,我有一个用于验证应用程序(如许可证)安全性的程序集。 我如何允许每次应用程序调用验证方法时,都从正确的程序集加载该方法? 我想防止有人创建假程序集来绕过这些验证 通过添加一个.snk来获得一个强名称密钥,这能解决我的问题吗 例如,如果我的应用程序使用MySecurity.dll,如果其他人使用相同的名称创建程序集并在bin文件夹中重写它,我的应用程序会知道这不是正确的程序集吗 我很担心,因为我们的解决方案使用两种验证,本地使用公共证书对许可证文件进行验证,以及在线验证(如果有internet连接

我有一个用于验证应用程序(如许可证)安全性的程序集。 我如何允许每次应用程序调用验证方法时,都从正确的程序集加载该方法? 我想防止有人创建假程序集来绕过这些验证

通过添加一个
.snk
来获得一个强名称密钥,这能解决我的问题吗

例如,如果我的应用程序使用
MySecurity.dll
,如果其他人使用相同的名称创建程序集并在
bin
文件夹中重写它,我的应用程序会知道这不是正确的程序集吗

我很担心,因为我们的解决方案使用两种验证,本地使用公共证书对许可证文件进行验证,以及在线验证(如果有internet连接)。但这些都可以轻易绕过


您可以在代码中硬编码该dll文件的哈希字符串,并在运行时检查它(可能在计时器中)


您还需要使用类似这样的东西来保护您的程序集

强命名机制适用于t确切地说,在这种情况下。@Gusdor不,它不是。如果是这样的话,最终用户将无法。强命名的存在是为了防止来自多个供应商的程序集的一致名称冲突。@ScottChamberlain Integrity在文档中特别提到,该文档通过第三方修改文件的完整性,而无需最终用户的关注。它不能防止最终用户试图替换或修改fileAuthenticode签名,这是检查它的最佳方式。在assembly.load事件上,检查程序集是否由预期证书签名。OP authenticode的注释和强名称签名是两种不同的机制。