似乎 SGen 不使用父程序集中的文件版本,而是使用 AssemblyVersion。如果您想保持强名称不变并通过 MSI API 兼容补丁发布,这是有问题的。
例如,如果添加了新数据类型,则需要在目标机器上修补生成的 XmlSerializers 程序集。但是 MSI 只查看文件版本(相等)并且什么都不做。
有没有办法指示 SGen 使用源程序集中的文件版本?
例子:
源程序集:
[assembly: AssemblyVersion("2.0.0.0")]
[assembly: AssemblyFileVersion("35.0.0.0")]
生成的序列化程序程序集将在 PE Header for File 和 Product Version 中获得 2.0.0.0。这是错误的。
作为最后的手段,我会考虑修补生成的程序集的文件版本,但我确实担心如果程序集是强命名的,它将不再加载(尚未尝试过),因为至少以前的 .NET 版本确实创建了包含PE头的完整文件。