MyAssembly.XmlSerializers.dll สร้างขึ้นเพื่ออะไร


124

ฉันกำลังทำโปรเจ็กต์ที่สร้างแอสเซมบลี ฉันเพิ่งสังเกตว่ามีการสร้างแอสเซมบลีเพิ่มเติม * .XmlSerializers.dll ทำไมไฟล์นี้ถูกสร้างขึ้นโดยอัตโนมัติและใช้ทำอะไร


ฉันคิดว่าคุณรู้แล้วว่าทำไมมันถูกสร้างขึ้น หากไม่เป็นเช่นนั้นระบบจะสร้างขึ้นเนื่องจากโครงการของคุณกำลังเปิดเผยบริการเว็บประเภทหนึ่ง จะถูกสร้างขึ้นเสมอทั้งในช่วงเวลาคอมไพล์หรือระหว่างรันไทม์ ในรันไทม์จะถูกสร้างขึ้นในโฟลเดอร์ Temp ด้วยชื่อแบบสุ่ม
AaA

คำตอบ:


101

ในการใช้งาน. NET XmlSerializer จะสร้างแอสเซมบลีชั่วคราวสำหรับการทำให้เป็นอนุกรม / deserializing คลาสของคุณ (ด้วยเหตุผลด้านประสิทธิภาพ) สามารถสร้างได้ทันที (แต่ต้องใช้เวลาในการดำเนินการทุกครั้ง) หรือสามารถสร้างไว้ล่วงหน้าในระหว่างการรวบรวมและบันทึกไว้ในแอสเซมบลีที่คุณกำลังถามถึง

คุณสามารถเปลี่ยนพฤติกรรมนี้ในตัวเลือกของโครงการ (แท็บคอมไพล์ -> ตัวเลือกขั้นสูงการคอมไพล์ -> สร้างประกอบอนุกรม , รถยนต์หรือบนตามลำดับ) องค์ประกอบที่เกี่ยวข้องในไฟล์โครงการคือGenerateSerializationAssembliesตัวอย่างเช่น<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>.


21
หากสร้างขึ้นเมื่อการตั้งค่าโครงการเป็นอัตโนมัติหมายความว่าจำเป็นหรือไม่ จะเกิดอะไรขึ้นถ้าคุณไม่ปรับใช้ X.XMLSerializers.dll กับแอปพลิเคชันมันจะถูกสร้างขึ้นทันทีหรือไม่?
รอรี

3
แล้วเราจะไปเกี่ยวกับการโหลดชุดประกอบเหล่านี้ล่วงหน้าได้อย่างไร?
Carlo

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 ให้คลิกขวาที่ไฟล์โครงการของคุณแล้วเลือก "Properties"
  2. คลิกแท็บ "สร้าง"
  3. เปลี่ยนเมนูแบบเลื่อนลง "Generate serialization assembly" จาก "Auto" เป็น "Off"
  4. สร้างใหม่และมันจะหายไป

17
ใช่ แต่คำถามคือทำไมมันถูกสร้างขึ้น!
Hemant

ฉันรู้ว่านี่เป็นการตอบกลับแบบเก่า แต่ใน VS2015 อัปเดต 3 บนแอป Winforms ที่กำหนดเป้าหมายเป็น. NET 2.0 x86 เมื่อคอมไพล์ในระบบ Win10 Ent 64 บิตแล้วแม้ว่าการตั้งค่า "สร้างชุดประกอบการทำให้เป็นอนุกรม" เป็นแบบเลื่อนลงเป็น "ปิด" ตามด้วย * .XmlSerializers ยังคงสร้าง dll แอปของฉันอ้างอิงบริการเว็บ ASMX อาจจะมีข้อผิดพลาดใน VS2015 Update 3?
ปีเตอร์

6

ฉันคิดว่านี่คือการรวบรวม JIT (ทันเวลา) ของซีเรียลไลเซอร์ XML ด้วยเหตุผลด้านประสิทธิภาพ

คุณจะได้รับสิ่งเดียวกันกับอินสแตนซ์ RegEx โดยใช้ตัวเลือก RegexOptions เปิดใช้งานคอมไพล์แล้ว

ฉันไม่ใช่ผู้เชี่ยวชาญ. NET CLR ขออภัยที่ขาดรายละเอียดทางเทคนิคที่แม่นยำ


5

*.XmlSerializers.dll ถูกสร้างขึ้นโดยใช้ Sgen.exe [XML Serializer Generator Tool]

ดูSgen.exe บน MSDN

โดยทั่วไปSgen.exeจะใช้ในเหตุการณ์ Post Build ของโครงการ ดูว่าโปรเจ็กต์ของคุณมีเหตุการณ์สร้างหลังที่สร้างไฟล์*.XmlSerializers.dll


4

โปรเจ็กต์สร้างเฉพาะ project.XMLSerialisers.dll สำหรับเว็บแอปพลิเคชัน สำหรับแอปพลิเคชันอื่นคุณต้องเรียกใช้ sgen แยกกัน


1
แอป WinForms ของฉันสร้าง MyProject.XMLSerializers.dll เมื่อทำการตั้งค่าหรืออัตโนมัติ
Kevin Driedger
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.