Pré-gerando XmlSerializers usando Sgen e ILMerge. Problemas com matrizes

Eu uso o XmlSerializer extensivamente e ao invés de permitir que o .NET gere os assemblies de serialização necessários em tempo de execução, eu gostaria de gerar esses assemblies antes do tempo e empacotá-los com o meu aplicativo. Eu sou capaz de usar o Sgen para gerar esses assemblies no tempo de compilação. Além disso, devo executar o Sgen separadamente para cada tipo de matriz que será serializado (usando sgen / t: Foo []). Finalmente, eu uso ILMerge para mesclar as classes de serialização de tipo de matriz no assembly Foo.XmlSerializers.dll. Eu verifiquei com ildasm que Foo.XmlSErializers.dll na verdade contém todas as classes mescladas.

Em tempo de execução, o .NET carrega com êxito o FooSerializer a partir do Foo.XmlSerializers.dll sem chamar o csc e gerar um assembly temporário. No entanto, o .NET falha ao carregar o ArrayOfFooSerializer da mesma dll e, de fato, invoca o csc.

Como posso pré-gerar com sucesso tipos de serialização para matrizes?

Considere os seguintes dois conjuntos e seus conteúdos simplificados:

Assembly: MyApp.exe

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

Assembly: Foo.dll

public class Foo
{

}

Mais informações:

O seguinte app.config faz com que eventos relacionados ao XmlSerialization sejam adicionados ao log de eventos

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

Não vejo eventos para o tipo Foo. Eu vejo a seguinte mensagem para Foo []:

O serializador pré-gerado 'Foo.XmlSerializers' expirou. Você precisa gerar novamente o serializador para 'Foo []'.

questionAnswers(2)

yourAnswerToTheQuestion