我有一个项目,我需要以编程方式加载 DLL 并在其中运行一些代码。DLL 及其依赖项存储在数据库中,我将它们写入磁盘,但我想在再次写入之前检查 DLL 是否已经存在。目前,数据库包含文件的强程序集名称和二进制数据以及版本号。我想我还需要存储程序集的公钥,以检查 DLL 目录中现有文件的密钥。
我知道我可以使用 AssemblyName.GetPublicKey() 获取程序集的公钥。我也应该将文件的公钥存储在数据库中吗?如果您的代码中没有公钥(可以),如何验证程序集?我发现的所有代码示例实际上只是显示了获取公钥或检查是否存在强名称。
现在,我正在研究一个图书馆管理类,它的核心只是一个字典。它在启动时检查 dll 目录并将每个文件的公钥添加到字典中。然后,当我需要检查一个程序集是否已经在磁盘上时,我可以只检查字典(但这需要我将公钥存储在数据库中)。它还使用 FileSystemWatcher 来监视对库的任何更改。如果我需要编写一个更新的程序集,我只需覆盖磁盘上的程序集,然后类就会更新字典。