Generación previa de XmlSerializers utilizando Sgen e ILMerge. Problemas con matrices

Utilizo XmlSerializer ampliamente y en lugar de permitir que .NET genere los ensamblajes de serialización necesarios en tiempo de ejecución, me gustaría generar estos ensamblados con anticipación y agruparlos con mi aplicación. Soy capaz de usar Sgen para generar estos ensamblados en tiempo de compilación. Además, debo ejecutar Sgen por separado para cada tipo de matriz que serializaré (usando sgen / t: Foo []). Finalmente, uso ILMerge para combinar las clases de serialización de tipo de matriz en el ensamblaje Foo.XmlSerializers.dll. He verificado con ildasm que Foo.XmlSErializers.dll contiene de hecho todas las clases combinadas.

En tiempo de ejecución, .NET carga con éxito FooSerializer de Foo.XmlSerializers.dll sin invocar a csc y ​​generar un ensamblaje temporal. Sin embargo, .NET no puede cargar ArrayOfFooSerializer desde la misma dll, y de hecho invoca csc.

¿Cómo puedo generar con éxito los tipos de serialización para matrices?

Considere los siguientes 2 ensamblajes y sus contenidos simplificados:

Ensamblaje: MyApp.exe

public class MyApp
{
    public static int Main(string[] args)
    {
        new XmlSerializer(typeof(Foo));
        new XmlSerializer(typeof(Foo[]));
    }
}

Ensamblaje: Foo.dll

public class Foo
{

}

Informacion adicional:

El siguiente app.config hace que los eventos relacionados con XmlSerialization se agreguen al registro de eventos

<configuration>
  <system.diagnostics> 
    <switches> 
      <add name="XmlSerialization.PregenEventLog" value="1" />
      <add name="XmlSerialization.Compilation" value="1" />
    </switches> 
  </system.diagnostics>
</configuration>

No veo eventos para el tipo Foo. Veo el siguiente mensaje para Foo []:

El serializador pre-generado 'Foo.XmlSerializers' ha caducado. Debe volver a generar el serializador para 'Foo []'.

Respuestas a la pregunta(2)

Su respuesta a la pregunta