我们需要有一个C#应用程序,我已编写执行其主要DLL之一的自动更新。这个想法是当.exe启动时,它首先检查互联网上的更新 - 然后下载更新
下载完成后,我们计划在执行
之前对DLL执行签名检查我是.NET程序集签名的新手,特别是涉及版本化程序集(从版本1.0到版本1.1)
.NET提供的任何东西可以帮助我吗?如何在强命名的约束下正确工作? (我可以吗?)
我希望在这个问题上提供指导和技术,而不仅仅是API和机制
答案 0 :(得分:1)
我觉得,您可能需要一个单独的进程(比如update.exe)来完成这项工作。
原因:如果您正在运行一个进程(例如MyApp.exe)并且它正在使用X.dll(已加载的模块),那么您将无法更新(替换)X.dll,因为它会抛出一个例外
System.IO.IOException:进程无法访问文件'X.dll' 因为它正被另一个进程使用。
因此,在加载X.dll模块之前,您可能必须执行此更新/替换。 如果需要控制加载程序集,则必须使用Reflections Assembly.Load。如果可以的话。
要获取可以使用的dll的版本号:
Assembly assembly = Assembly.LoadFrom("X.dll");
Version ver = assembly.GetName().Version;
要对程序集进行签名,可以使用signtool.exe等外部工具。 它是Windows SDK的一部分,它接受命令行参数,您可以找到更多相关信息here