SGen不使用父程序集中的FileVersion

时间:2012-09-19 09:19:23

标签: .net windows c#-4.0

似乎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头的完整文件的哈希值。

1 个答案:

答案 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和其他程序集属性。