MyAssembly.XmlSerializers.dll किसके लिए जनरेट किया गया है?


124

मैं एक प्रोजेक्ट पर काम कर रहा हूं, जो एक असेंबली बनाता है। मैंने अभी देखा कि एक अतिरिक्त असेंबली * .XmlSerializers.dll उत्पन्न किया जा रहा है। यह फ़ाइल ऑटो जनरेट क्यों की जाती है और इसका उपयोग किस लिए किया जाता है?


मुझे लगता है कि आप पहले से ही जानते हैं कि यह क्यों उत्पन्न होता है। यदि नहीं, तो यह इसलिए उत्पन्न होता है क्योंकि आपकी परियोजना एक प्रकार की वेब सेवा है। यह हमेशा या तो संकलन समय के दौरान या रनटाइम के दौरान उत्पन्न होता है। क्रम में यह एक यादृच्छिक नाम के साथ Temp फ़ोल्डर में उत्पन्न होता है
AaA

जवाबों:


101

में नेट कार्यान्वयन, XmlSerializer एक अस्थायी विधानसभा serializing के लिए / (प्रदर्शन के कारणों के लिए) अपनी कक्षाओं deserializing उत्पन्न करता है। यह या तो मक्खी पर उत्पन्न हो सकता है (लेकिन हर निष्पादन में समय लगता है), या यह संकलन के दौरान पूर्वगामी हो सकता है और इस विधानसभा में बचाया जा सकता है जिसके बारे में आप पूछ रहे हैं।

आप इस व्यवहार को प्रोजेक्ट विकल्पों (टैब कंपाइल -> एडवांस कंपाइल ऑप्शंस -> क्रमबद्ध असेंबली , ऑटो या ऑन , क्रमशः) में बदल सकते हैं। प्रोजेक्ट फ़ाइल में संबंधित तत्व 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
हाँ, लेकिन सवाल यह था कि यह क्यों उत्पन्न होता है!
हेमंत

मुझे पता है कि यह एक पुरानी प्रतिक्रिया है, लेकिन Win10 Ent 64bit सिस्टम पर संकलित .NET 2.0 x86 को लक्षित करने वाले एक Winforms ऐप पर VS2015 अपडेट 3 में तब भी जब सेटिंग "असेंबली असेंबली" को "डाउनडाउन" करने के लिए उत्पन्न होती है तो * .XmlSerializers। dll अभी भी उत्पन्न होता है। मेरा ऐप ASMX वेब सेवा को संदर्भित करता है। शायद VS2015 अपडेट 3 में एक बग?
पीटर

6

मुझे लगता है कि यह प्रदर्शन कारणों के लिए XML धारावाहिकों के JIT (बस समय में) संकलन है।

आप Regge इंस्टेंसेस के साथ RegexOptions.Compiled विकल्प को चालू करके उसी चीज़ को प्राप्त करते हैं।

मैं कोई .NET सीएलआर विशेषज्ञ नहीं हूं, सटीक तकनीकी विवरण की कमी के लिए खेद है।


5

*.XmlSerializers.dll Sgen.exe [XML Serializer जेनरेटर टूल] का उपयोग करके उत्पन्न किया जाता है

MSDN पर Sgen.exe देखें

आमतौर पर Sgen.exeप्रोजेक्ट के पोस्ट बिल्ड ईवेंट में इसका उपयोग किया जाता है। देखें कि क्या आपके प्रोजेक्ट में पोस्ट बिल्ड ईवेंट है जो इसे जेनरेट करता है*.XmlSerializers.dll


4

परियोजना केवल वेब अनुप्रयोगों के लिए project.XMLSerialisers.dll उत्पन्न करती है। अन्य एप्लिकेशन के लिए आपको अलग से sgen चलाना होगा।


1
मेरा WinForms ऐप MyProject.XMLSerializers.dll बनाता है जब इसे या ऑटो पर सेट किया जाता है
केविन ड्रेजर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.