Do czego jest generowany plik MyAssembly.XmlSerializers.dll?

124

Pracuję nad projektem, który generuje montaż. Właśnie zauważyłem, że generowany jest dodatkowy zestaw * .XmlSerializers.dll. Dlaczego ten plik jest generowany automatycznie i do czego służy?

Hemant
źródło
Myślę, że już wiesz, dlaczego jest generowany. jeśli nie, jest generowany, ponieważ Twój projekt udostępnia rodzaj usługi sieciowej. jest zawsze generowany w czasie kompilacji lub w czasie wykonywania. w czasie wykonywania jest generowany w folderze Temp o losowej nazwie
AaA

Odpowiedzi:

101

W implementacji .NET XmlSerializer generuje tymczasowy zestaw do serializacji / deserializacji klas (ze względu na wydajność). Można go wygenerować w locie (ale przy każdym wykonaniu zajmuje to trochę czasu) lub można go wstępnie wygenerować podczas kompilacji i zapisać w tym zestawie, o który pytasz.

Możesz zmienić to zachowanie w opcjach projektu (zakładka Kompiluj -> Zaawansowane opcje kompilacji -> Generuj zestawy serializacji , odpowiednio Auto lub Włącz ). Odpowiedni element w pliku projektu to GenerateSerializationAssemblies , na przykład <GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>.

Grzenio
źródło
21
Jeśli jest generowany, gdy ustawienie projektu to Auto, czy to oznacza, że ​​jest potrzebne? co się stanie, jeśli nie wdrożysz X.XMLSerializers.dll z aplikacją, czy zostanie on wygenerowany w locie?
Rory,
3
Jak więc zabrać się za wstępne ładowanie tych zestawów?
Carlo
1
@Rory, wiem, że to pytanie jest stare, ale wydaje się, że tak jest. Trzy z moich projektów były ustawione na Auto, ale tylko jeden utworzył bibliotekę DLL serializacji.
ps2goat
4
**Generate Serialization Assemblies** Specifies whether the compiler will use the XML Serializer Generator Tool (Sgen.exe) to create XML serialization assemblies. Serialization assemblies can improve the startup performance of XmlSerializer if you have used that class to serialize types in your code. By default, this option is set to Auto, which specifies that serialization assemblies be generated only if you have used XmlSerializer to encode types in your code to XML. msdn.microsoft.com/en-us/library/kb4wyys2.aspx
ps2goat
2
Ręczna zmiana VS2015: kliknij prawym przyciskiem myszy nazwę projektu -> Właściwości -> Kompiluj -> (Przewiń w dół) Generuj zestaw serializacji.
Eido95,
54

FYI. Dokładne kroki, aby zatrzymać automatyczne generowanie XmlSerializers.dll, są następujące:

  1. W VS kliknij prawym przyciskiem myszy plik projektu i wybierz „Właściwości”
  2. Kliknij kartę „Kompiluj”
  3. Zmień opcję „Generuj zestaw serializacji” z „Automatycznie” na „Wyłącz”
  4. Odbuduj i zniknie
jontsnz
źródło
17
Tak, ale pytanie brzmiało, dlaczego jest generowany!
Hemant
Wiem, że jest to stara odpowiedź, ale w VS2015 Update 3 w aplikacji Winforms przeznaczonej dla platformy .NET 2.0 x86 po skompilowaniu na 64-bitowym systemie Win10 Ent, a nawet po ustawieniu listy rozwijanej „Generuj zestaw serializacji” na „Wyłącz”, a następnie * .XmlSerializers. dll jest nadal generowany. Moja aplikacja odwołuje się do usługi internetowej ASMX. Może błąd w VS2015 Update 3?
Peter
6

Myślę, że jest to kompilacja JIT (Just in time) programów serializatorów XML ze względu na wydajność.

To samo dzieje się z instancjami RegEx przy włączonej opcji RegexOptions.Compiled.

Nie jestem ekspertem .NET CLR, przepraszam za brak precyzyjnych szczegółów technicznych.

Alan Christensen
źródło
5

*.XmlSerializers.dll są generowane za pomocą Sgen.exe [XML Serializer Generator Tool]

Zobacz Sgen.exe w witrynie MSDN

Zwykle Sgen.exejest używany w wydarzeniach po kompilacji projektów. Sprawdź, czy Twój projekt ma zdarzenie po kompilacji, które generuje plik*.XmlSerializers.dll

abhilash
źródło
4

Projekt generuje tylko plik project.XMLSerialisers.dll dla aplikacji internetowych. W przypadku innych aplikacji musisz osobno uruchomić sgen.

Malcolm
źródło
1
Moja aplikacja WinForms generuje
plik MyProject.XMLSerializers.dll