ฉันกำลังทำโปรเจ็กต์ที่สร้างแอสเซมบลี ฉันเพิ่งสังเกตว่ามีการสร้างแอสเซมบลีเพิ่มเติม * .XmlSerializers.dll ทำไมไฟล์นี้ถูกสร้างขึ้นโดยอัตโนมัติและใช้ทำอะไร
ฉันกำลังทำโปรเจ็กต์ที่สร้างแอสเซมบลี ฉันเพิ่งสังเกตว่ามีการสร้างแอสเซมบลีเพิ่มเติม * .XmlSerializers.dll ทำไมไฟล์นี้ถูกสร้างขึ้นโดยอัตโนมัติและใช้ทำอะไร
คำตอบ:
ในการใช้งาน. NET XmlSerializer จะสร้างแอสเซมบลีชั่วคราวสำหรับการทำให้เป็นอนุกรม / deserializing คลาสของคุณ (ด้วยเหตุผลด้านประสิทธิภาพ) สามารถสร้างได้ทันที (แต่ต้องใช้เวลาในการดำเนินการทุกครั้ง) หรือสามารถสร้างไว้ล่วงหน้าในระหว่างการรวบรวมและบันทึกไว้ในแอสเซมบลีที่คุณกำลังถามถึง
คุณสามารถเปลี่ยนพฤติกรรมนี้ในตัวเลือกของโครงการ (แท็บคอมไพล์ -> ตัวเลือกขั้นสูงการคอมไพล์ -> สร้างประกอบอนุกรม , รถยนต์หรือบนตามลำดับ) องค์ประกอบที่เกี่ยวข้องในไฟล์โครงการคือGenerateSerializationAssembliesตัวอย่างเช่น<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
.
Auto
แต่มีเพียงโครงการเดียวเท่านั้นที่สร้าง DLL แบบอนุกรม
**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
FYI ขั้นตอนที่แน่นอนในการหยุด XmlSerializers.dll จากการสร้างขึ้นโดยอัตโนมัติคือ:
ฉันคิดว่านี่คือการรวบรวม JIT (ทันเวลา) ของซีเรียลไลเซอร์ XML ด้วยเหตุผลด้านประสิทธิภาพ
คุณจะได้รับสิ่งเดียวกันกับอินสแตนซ์ RegEx โดยใช้ตัวเลือก RegexOptions เปิดใช้งานคอมไพล์แล้ว
ฉันไม่ใช่ผู้เชี่ยวชาญ. NET CLR ขออภัยที่ขาดรายละเอียดทางเทคนิคที่แม่นยำ
*.XmlSerializers.dll
ถูกสร้างขึ้นโดยใช้ Sgen.exe [XML Serializer Generator Tool]
โดยทั่วไปSgen.exe
จะใช้ในเหตุการณ์ Post Build ของโครงการ ดูว่าโปรเจ็กต์ของคุณมีเหตุการณ์สร้างหลังที่สร้างไฟล์*.XmlSerializers.dll
โปรเจ็กต์สร้างเฉพาะ project.XMLSerialisers.dll สำหรับเว็บแอปพลิเคชัน สำหรับแอปพลิเคชันอื่นคุณต้องเรียกใช้ sgen แยกกัน