Wstępne generowanie XmlSerializers przy użyciu Sgen i ILMerge. Problemy z tablicami

Używam XmlSerializer w szerokim zakresie i zamiast pozwalać .NET na generowanie niezbędnych zestawów serializacji w czasie wykonywania, chciałbym wygenerować te zespoły z wyprzedzeniem i połączyć je z moją aplikacją. Jestem w stanie użyć Sgen do generowania tych zespołów w czasie kompilacji. Dodatkowo muszę uruchamiać Sgen oddzielnie dla każdego typu tablicy, który będę serializować (używając sgen / t: Foo []). Na koniec używam ILMerge do łączenia klas serializacji typu tablicowego z zestawem Foo.XmlSerializers.dll. Sprawdziłem z ildasmą, że Foo.XmlSErializers.dll faktycznie zawiera wszystkie połączone klasy.

W środowisku wykonawczym .NET pomyślnie ładuje FooSerializer z Foo.XmlSerializers.dll bez wywoływania csc i generowania tymczasowego zespołu. Jednak .NET nie może załadować ArrayOfFooSerializer z tej samej biblioteki DLL i faktycznie wywołuje csc.

Jak mogę pomyślnie wstępnie generować typy serializacji dla tablic?

Rozważ następujące 2 zespoły i ich uproszczoną zawartość:

Zgromadzenie: MyApp.exe

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

Złożenie: Foo.dll

public class Foo
{

}

Dalsze informacje:

Następujące app.config powoduje, że zdarzenia związane z XmlSerialization zostaną dodane do dziennika zdarzeń

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

Nie widzę wydarzeń dla typu Foo. Widzę następujący komunikat dla Foo []:

Wygenerowany wcześniej serializator „Foo.XmlSerializers” wygasł. Musisz ponownie wygenerować serializator dla „Foo []”.

questionAnswers(2)

yourAnswerToTheQuestion