似乎SGen不使用父程序集中的文件版本,而是使用AssemblyVersion。如果您希望保持强名称不变并通过MSI API兼容补丁发布,则会出现问题。
如果添加了新数据类型,则需要在目标计算机上修补生成的XmlSerializers程序集。但MSI只查看文件版本(相同)并且什么都不做。
有没有办法指示SGen使用源程序集中的文件版本?
示例:
来源大会:
[assembly: AssemblyVersion("2.0.0.0")]
[assembly: AssemblyFileVersion("35.0.0.0")]
生成的Serializer程序集将在PE Header for File和Product Version中获得2.0.0.0。这是错误的。
作为最后的手段,我会考虑修补生成的程序集的文件版本,但我担心如果程序集强大,命名它将不再加载(还没有尝试过),因为至少以前的.NET版本确实创建了包含PE头的完整文件的哈希值。
答案 0 :(得分:3)
解决此问题的方法是创建一个包含AssemblyFileVersion
的程序集属性的代码文件,并告诉sgen
包含该文件。
使用以下代码创建名为XmlSerializersAssemblyInfo.cs的文件:
[assembly:System.Reflection.AssemblyTitleAttribute("title")]
[assembly:System.Reflection.AssemblyDescriptionAttribute("description")]
[assembly:System.Reflection.AssemblyCompanyAttribute("company")]
[assembly:System.Reflection.AssemblyProductAttribute("product")]
[assembly:System.Reflection.AssemblyFileVersionAttribute("1.2.3.4")]
sgen
实用程序允许您使用/c
添加编译器开关,如下所示:
sgen.exe" /a:"$(TargetPath)" /f /c:/keyfile:"$(ProjectDir)myApp.snk" /c:"$(ProjectDir)XmlSerializersAssemblyInfo.cs"
将sgen
命令添加到您的帖子构建活动中,瞧!您将获得一个XmlSerializer
DLL,其中包含您需要的AssemblyFileVersion
和其他程序集属性。