Для чого створено MyAssembly.XmlSerializers.dll?


124

Я працюю над проектом, який створює збірку. Щойно я помітив, що створюється додаткова збірка * .XmlSerializers.dll. Чому цей файл створюється автоматично та для чого він використовується?


Я думаю, ви вже знаєте, чому це породжується. якщо ні, то він генерується, тому що ваш проект відкриває свого роду веб-сервіс. він завжди генерується або під час компіляції, або під час виконання. під час виконання він генерується у папці Temp із випадковим іменем
AaA

Відповіді:


101

У реалізації .NET , XmlSerializer створює тимчасову збірку для серіалізації / дезаріалізації ваших класів (з міркувань продуктивності). Він може бути згенерований під час руху (але це потребує часу на кожне виконання), або він може бути попередньо сформований під час компіляції та збережений у цій збірці, про яку ви просите.

Ви можете змінити таку поведінку в параметрах проекту (вкладка " Компілювати" -> " Додаткові параметри компіляції" -> Створити збірки серіалізації , Автоматично або Увімкнено відповідно). Відповідним елементом у файлі проекту є , наприклад, GenerateSerializationAssemblies<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies> .


21
Якщо він генерується, коли налаштуваннями проекту є Авто, це означає, що він потрібен? що станеться, якщо ви не будете розгортати X.XMLSerializers.dll із додатком, це буде генеруватися на льоту?
Рорі

3
То як же можна провести попереднє завантаження цих збірок?
Карло

1
@ Рорі, я знаю, що це питання давнє, але це, мабуть, так і є. Три мої проекти були налаштовані Auto, але лише один створив DLL для серіалізації.
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
Вручна зміна VS2015: клацніть правою кнопкою миші на назві проекту -> Властивості -> Збірка -> (Прокрутка вниз) Генеруйте збірку серіалізації.
Eido95

54

FYI. Точні кроки, щоб запобігти автоматичному генеруванню XmlSerializers.dll, є:

  1. У VS правою кнопкою миші клацніть файл проекту та виберіть "Властивості"
  2. Перейдіть на вкладку «Побудувати»
  3. Змініть спадне меню "Створити збірку серіалізації" з "Авто" на "Вимкнено"
  4. Перебудуйте, і його вже не буде

17
Так, але питання полягало в тому, чому це породжується!
Хемант

Я знаю, що це стара відповідь, але в VS2015 Оновлення 3 на націленні на додаток Winforms. NET 2.0 x86, коли компілюється в 64-бітовій системі Win10 Ent, а потім навіть у спадному меню "Створити серіалізацію" на "Вимкнено", а потім * .XmlSerializer. dll все ще генерується. У моїй програмі є посилання на веб-службу ASMX. Може бути помилка в оновленнях VS2015 3?
Пітер

6

Я думаю, що це компіляція JIT (Тільки в часі) XML-серіалізаторів з міркувань продуктивності.

Ви отримуєте те ж саме з екземплярами RegEx, використовуючи параметр RegexOptions.Compiled.

Я не експерт .NET CLR, вибачте за відсутність точних технічних деталей.


5

*.XmlSerializers.dll створюються за допомогою інструмента Sgen.exe [Інструмент генератора XML-серіалізаторів]

Дивіться Sgen.exe на MSDN

Зазвичай Sgen.exeце використовується у подіях Post Build подій. Перевірте, чи є у вашому проекті подія після складання, яка генерує*.XmlSerializers.dll


4

Проект генерує лише проект.XMLSerialisers.dll для веб-додатків. Для інших програм вам потрібно запустити sgen окремо.


1
Мій додаток WinForms генерує MyProject.XMLSerializers.dll при встановленні його або авто
Кевін Дрідджер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.