C#强大的命名和版本控制

时间:2013-03-16 05:28:47

标签: c# versioning updates signing

我们需要有一个C#应用程序,我已编写执行其主要DLL之一的自动更新。这个想法是当.exe启动时,它首先检查互联网上的更新 - 然后下载更新

下载完成后,我们计划在执行

之前对DLL执行签名检查

我是.NET程序集签名的新手,特别是涉及版本化程序集(从版本1.0到版本1.1)

.NET提供的任何东西可以帮助我吗?如何在强命名的约束下正确工作? (我可以吗?)

我希望在这个问题上提供指导和技术,而不仅仅是API和机制

1 个答案:

答案 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