2013-04-25 7 views
7

में SlowCheetah कॉन्फ़िगर ट्रांसफॉर्म का उपयोग कर SlowCheetah कॉन्फ़िगर ट्रांसफॉर्म का उपयोग करके मैंने SlowCheetah को पुराने में डाउनलोड किया। नेट 3.5 वेब फॉर्म को web.config में ट्रांसफॉर्म जोड़ने के लिए।एक वेब वेब फॉर्म ऐप

मैंने अतीत में सफलता के साथ app.config को बदलने के लिए विंडोज सेवा और कंसोल अनुप्रयोगों के साथ स्लोचेटा का उपयोग किया है। उन मामलों में, कॉन्फ़िगरेशन को बदल दिया जाता है और बिन में ApplicationName.exe.config के रूप में रखा जाता है।

हालांकि, इस वेब फॉर्म के साथ, कॉन्फ़िगरेशन फ़ाइल कभी भी बिन में समाप्त नहीं होती है, क्योंकि वेब फॉर्म साइट्स को बस चलाने के लिए रूट निर्देशिका में बिन और आईआईएस बिंदुओं में गिराए गए .dll के साथ बनाया गया है। तो वेब प्रक्रिया के बजाय वेब.कॉन्फिग को शामिल करने और बिन में पैक करने के बजाय, यह रूट स्थान में अकेला ही छोड़ा गया है।

रूट में web.config पर कोई ट्रांसफॉर्म लागू नहीं किया जा रहा है, जो एक अच्छी बात है, क्योंकि रूट निर्देशिका में web.config स्रोत नियंत्रण में है और वह फ़ाइल है जिसे हम ट्रांसफॉर्म करते हैं।

मुझे वेब.कॉन्फिग को निर्माण में शामिल करने में खुशी होगी ताकि धीमी चित्ता इसे बदल दे और फिर इसे बिन में छोड़ दें। इसके बाद हमें इसे मैन्युअल रूप से बिन से बाहर ले जाना होगा और इसे हमारे सर्वर पर रूट स्तर पर वापस रखना होगा, लेकिन ट्रांसफॉर्म होने के लायक होगा।

क्या कोई जानता है कि मेरे वेब.कॉन्फिग के खिलाफ ट्रांसफॉर्म को कैसे चलाया जाए या इसे निर्माण प्रक्रिया में शामिल किया जाए तो धीमी गति से उसका जादू काम कर सकता है?

धन्यवाद!

अद्यतन

मैं web.config के गुणों संशोधित और यह अब निर्माण में शामिल है, फिर भी, परिवर्तनों अभी भी यह करने के लिए लागू नहीं किया जा रहा है।

बिल्ड कार्रवाई: एंबेडेड संसाधन

कॉपी आउटपुट निदेशक को: प्रतिलिपि हमेशा

उत्तर

5

समाधान

मैं Web.template.config के लिए हमारी स्रोत नियंत्रण में Web.config नाम और जोड़ा गया Web.template.Debug.config और Web.template.Release.config

अगला, प्रोजेक्ट फ़ाइल को अनलोड करें और .csproj संपादित करें xml निम्नलिखित तत्व जोड़ना

यह रूट निर्देशिका में एक नई Web.config फ़ाइल बनाता है। वूट! .template.config करने के लिए फ़ाइलों का नाम बदलने के बिना एक -

<PropertyGroup> 
    <PrepareForRunDependsOn> 
    $(PrepareForRunDependsOn); 
    WebConfigTransform; 
    </PrepareForRunDependsOn> 
</PropertyGroup> 
<Target Name="WebConfigTransform"> 
    <Message Text="Configuration: $(Configuration): Web.template.$(Configuration).config" /> 
    <TransformXml Source="Web.template.config" 
       Transform="Web.template.$(Configuration).config" 
       Destination="Web.config" /> 
</Target> 
1

मिले एक बेहतर समाधान।

निम्नलिखित को अपने वेब फॉर्म .csproj फ़ाइल में पेस्ट करें।

<Target Name="BeforeBuild"> 
    <Delete Files="$(TEMP)\Web.TEMP.config" /> 
    <Copy SourceFiles="Web.config" DestinationFiles="$(TEMP)\Web.TEMP.config" /> 
    <TransformXml 
     Source="$(TEMP)\Web.TEMP.config" 
     Transform="Web.$(Configuration).config" 
     Destination="Web.config" /> 
    </Target> 
+0

समस्या यह है कि आप कुछ परिपत्र संदर्भ बनाते हैं। मान लें कि आपके पास एक परिवर्तन है जो तत्वों को सम्मिलित करता है। पहली बार यह चलने पर वेब.कॉन्फिग में क्या होगा और नए तत्व डालेंगे, फिर दूसरी बार जब आप ट्रांसफॉर्म चलाते हैं तो आप डुप्लिकेट तत्व डालेंगे। इसके अलावा, ध्यान रखें, अगर आप web.config स्रोत नियंत्रण में हैं, तो क्या आप इसे हर समय बदलना चाहते हैं? – Michael

+0

परिपत्र मुद्दे से सहमत हैं। हालांकि हम केवल "SetAttribute" परिवर्तन का उपयोग करते हैं, इसलिए यह हमारे लिए बहुत अच्छा काम करता है। –

+0

वेब नियंत्रण के तहत वेब.कॉन्फिग होना हमारे लिए महत्वपूर्ण है। इस प्रकार समाधान। लेकिन मैं मानता हूं कि आपका समाधान बेहतर है। –

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