The root of the issue is that the assembly you are seeing in the error message has an incorrect entry in the .NET Framework unification table.
That incorrect entry causes the assembly reference to not correctly unify with the assembly in the framework and leads to that error. This is documented as a known issue in .NET Framework 4.7.1.
As a workaround you can add these targets to your project. They will remove the DesignFacadesToFilter
from the list of references passed to SGEN (and add them back once SGEN is done)
<Target Name="RemoveDesignTimeFacadesBeforeSGen" BeforeTargets="GenerateSerializationAssemblies">
<ItemGroup>
<DesignFacadesToFilter Include="System.IO.Compression.ZipFile" />
<_FilterOutFromReferencePath Include="@(_DesignTimeFacadeAssemblies_Names->'%(OriginalIdentity)')"
Condition="'@(DesignFacadesToFilter)' == '@(_DesignTimeFacadeAssemblies_Names)' and '%(Identity)' != ''" />
<ReferencePath Remove="@(_FilterOutFromReferencePath)" />
</ItemGroup>
<Message Importance="normal" Text="Removing DesignTimeFacades from ReferencePath before running SGen." /> </Target>
<Target Name="ReAddDesignTimeFacadesBeforeSGen" AfterTargets="GenerateSerializationAssemblies">
<ItemGroup>
<ReferencePath Include="@(_FilterOutFromReferencePath)" />
</ItemGroup>
<Message Importance="normal" Text="Adding back DesignTimeFacades from ReferencePath now that SGen has ran." />
</Target>
Edit: If the above doesn't work, please share a detailed msbuild log to help understand why the target doesn't work.
Another option (machine wide) is to add the following binding redirect to sgen.exe.config:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.IO.Compression.ZipFile" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
This will only work on machines with .NET Framework 4.7.1. installed. Once .NET Framework 4.7.2 is installed on that machine, this workaround should be removed.