2010-01-21 12 views
7

मेरे पास एक बिल्ड प्रक्रिया है जो मेरा वीएस 2008 .NET 2.0 ASP.NET प्रोजेक्ट लेती है और इसे MSBuild का उपयोग करके बनाता है। परियोजना ASPX फ़ाइलें, प्लस एक वेब सेवा किसी अन्य वेब सेवा से कनेक्ट करता है, और भी;)MSBuild क्यों प्रकाशित वेब अनुप्रयोग के रूट फ़ोल्डर में * .XmlSerializers.dll असेंबली डालता है?

सभी अच्छी तरह से काम करने के लिए छोड़कर MSBuild _PublishedWebsites की तुलना में फ़ोल्डर _PublishedWebsites * .XmlSerializers.dll विधानसभा फ़ाइल डालता \ MySite बल्कि लगता है \ MySite \ bin जैसा कि यह अन्य डीएल के साथ करता है।

क्या इससे कोई फर्क पड़ता है कि * .XmlSerializers.dll असेंबली फ़ाइल बिन फ़ोल्डर में नहीं है?

या एमएसबिल्ड समाप्त होने के बाद * .XmlSerializers.dll असेंबली को बिन फ़ोल्डर में कॉपी करने के लिए मेरी बिल्ड प्रक्रिया का उपयोग करना चाहिए?

उत्तर

6

आपको इस असेंबली की आवश्यकता नहीं है जब तक कि आप अपनी असेंबली से क्रमबद्ध और deserializing प्रकार नहीं होंगे। यह असेंबली संकलक द्वारा उत्पन्न होती है ताकि आपके एप्लिकेशन को इसे चलाने और चलाने के बाद इसे उत्पन्न करने से बचाया जा सके।

यदि आप क्रमबद्ध करने का इरादा रखते हैं, तो असेंबली रखें क्योंकि यह प्रदर्शन के साथ मदद करेगा। यदि आप कोई धारावाहिक करने का इरादा नहीं रखते हैं तो इसे अनदेखा करने या पूरी तरह से इसे हटाने के लिए स्वतंत्र महसूस करें।

इस अभ्यास के बारे में अधिक जानकारी के लिए कृपया XML Serializer Generator Tool देखें:

एक्सएमएल Serializer जेनरेटर आदेश एक XmlSerializer जब की स्टार्टअप प्रदर्शन में सुधार करने में एक निर्दिष्ट विधानसभा में प्रकार के लिए एक XML क्रमांकन विधानसभा बनाता है यह धारावाहिक या निर्दिष्ट प्रकारों की वस्तुओं को deserializes।

+0

धन्यवाद। मैं अपने कुछ वर्गों को एक्सएमएल और पीठ में बदलने के लिए क्रमबद्धता का उपयोग करता हूं। जो मुझे समझ में नहीं आता है, क्या मुझे * .xmlSerializers.dll असेंबली को बिन फ़ोल्डर में ले जाना चाहिए या इसे वेब एप्लिकेशन के मूल फ़ोल्डर में छोड़ देना चाहिए? –

+1

इसे '\ bin' निर्देशिका में ले जाएं ताकि सीएलआर इसे पा सके। –

2

हां, इससे कोई फर्क नहीं पड़ता कि XmlSerializers असेंबली बिन निर्देशिका में नहीं है। फ़्यूज़न लॉग व्यूअर का उपयोग करके मैंने अपने संदेह की पुष्टि की कि वेब अनुप्रयोग रूट में छोड़े जाने पर डीएलएल लोड नहीं किया जा रहा था।

इसे ठीक करने के लिए, आप एक AfterBuild लक्ष्य जोड़ सकते हैं जो फ़ाइल को सही स्थान पर ले जाता है। मैं निम्नलिखित का उपयोग करते हैं, लेकिन MSBuild के नए संस्करण एक चाल काम है:

<Target Name="AfterBuild"> 
    <!-- Don't do this when the final destination is the same as build destination (local builds) --> 
    <Exec Command="move /Y &quot;$(WebProjectOutputDir)\$(AssemblyName).XmlSerializers.dll&quot; &quot;$(WebProjectOutputDir)\bin&quot;" Condition="'$(OutDir)' != '$(OutputPath)'"/> 
    </Target> 

नोट: यदि आप का निर्माण और एक ही निर्देशिका से वेब एप्लिकेशन चला रहे हैं (जैसा कि आम तौर पर मामला है, जब अपने देव पर स्थानीय रूप से चल रहा है मशीन) और प्रोजेक्ट सेटिंग "सीरियलाइजेशन असेंबली जेनरेट करें" पर सेट है, फ़ाइल बिन निर्देशिका में जेनरेट की गई है। यही कारण है कि मैंने उस मामले में निष्पादित नहीं किया गया कार्य को कॉन्फ़िगर किया।

मैं बस यह सुनिश्चित कर सकता था कि फ़ाइल मौजूद है, लेकिन मैं यह सुनिश्चित करना चाहता था कि निर्माण विफल हो गया है अगर किसी कारण से फ़ाइल एकीकरण के दौरान अपेक्षित स्थान पर नहीं थी।

संबंधित मुद्दे