我们需要让我编写的 C# 应用程序自动更新其主要 DLL 之一。这个想法是当 .exe 启动时,它首先检查互联网是否有更新 - 然后下载该更新
下载完成后,我们计划在执行之前对 DLL 执行签名检查
我是 .NET 程序集签名机制的新手,尤其是在版本化程序集方面(从 1.0 版到 1.1 版)
.NET 是否提供任何可以帮助我的东西?如何在强命名的约束下正确工作?(我可以吗?)
我希望在这个问题上获得指导和技术,而不是 API 和机制
我们需要让我编写的 C# 应用程序自动更新其主要 DLL 之一。这个想法是当 .exe 启动时,它首先检查互联网是否有更新 - 然后下载该更新
下载完成后,我们计划在执行之前对 DLL 执行签名检查
我是 .NET 程序集签名机制的新手,尤其是在版本化程序集方面(从 1.0 版到 1.1 版)
.NET 是否提供任何可以帮助我的东西?如何在强命名的约束下正确工作?(我可以吗?)
我希望在这个问题上获得指导和技术,而不是 API 和机制
我觉得,您可能需要一个单独的进程(比如 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 的一部分,它接受命令行参数,您可以在此处找到有关它的更多信息