2011-12-22 23 views
5

इंस्टॉल करते समय कई वेब.कॉन्फिग फ़ाइलों में से एक को कैसे तैनात कर सकता हूं, मैं कमांड लाइन से Wix 3.6 बीटा का उपयोग कर रहा हूं, वीएस परियोजनाओं के रूप में नहीं। मेरे पास एक वेब एप्लिकेशन है जो निर्देशिका के रूप में गर्मी के साथ कटाई की जाती है। यह काम। मैं web.config ट्रांसफॉर्म का उपयोग कर रहा हूं ताकि प्रत्येक लक्षित वातावरण web.config फ़ाइलों को प्रबंधित किया जा सके। ये msbuild के साथ आउटपुट हैं, यह काम करता है और दृश्य स्टूडियो और स्रोत नियंत्रण में चीजें दिखाई देता है।Wix का उपयोग करके मैं एक एएसपीनेट वेब एप्लिकेशन

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

 <DirectoryRef Id="wwwroot"> 
     <Component Id="setup_a" Guid="some_guid" > 
      <File Source="$(var.ConfigSourceDir)\setup_a\web.config" /> 
      <Condition>ENVIRON = setup_a</Condition> 
     </Component> 

     <Component Id="setup_b" Guid="some_guid" > 
      <File Source="$(var.ConfigSourceDir)\setup_b\web.config" /> 
      <Condition>ENVIRON = setup_b</Condition> 
     </Component> 

यह किसी भी फ़ाइल नाम बनाने नहीं किया, आगे बढ़ या मुद्दों को हटाने, लेकिन बहुत ही मौलिक समस्या यह है कि कई web.config फ़ाइलें एक ही गंतव्य के लिए मैप किया जाता है है और यह मुझे के एक प्रकाश त्रुटि देता है "Product.wxs (xxx): त्रुटि LGHT0091: डुप्लिकेट प्रतीक 'फ़ाइल: web.config' मिला। इसका आमतौर पर मतलब है कि एक आईडी डुप्लिकेट किया गया है। यह सुनिश्चित करने के लिए जांचें कि किसी दिए गए प्रकार (फ़ाइल, घटक, फ़ीचर) के आपके सभी पहचानकर्ता विशिष्ट हैं।"

एक वैकल्पिक दृष्टिकोण अलग .config नामित फ़ाइलों का उपयोग और नाम बदलने/एक के लिए कदम web.config होने के लिए करने के लिए था, तो कुछ की तरह:

 <DirectoryRef Id="wwwroot"> 
       <Component Id="setup_a" Guid="some_guid" > 
       <File Id="setup_a.config" Source="$(var.ConfigSourceDir)\setup_a.config" /> 
       <CopyFile Id="moveit" SourceDirectory="wwwroot" SourceName="setup_a.config" DestinationDirectory="wwwroot" DestinationName="web.config" /> 
       </Component> 

यह CopyFile बॉट, एक त्रुटि फेंक नहीं है आदेश कुछ भी नहीं करता है। मुझे wwwroot फ़ोल्डर में setup_a.config मिलता है।

अगर मैं घोंसला CopyFile फ़ाइल के अंदर, प्रतिलिपि कार्रवाई तो काम करता है:

 <DirectoryRef Id="wwwroot"> 
       <Component Id="setup_a" Guid="some_guid" > 
       <File Id="setup_a.config" Source="$(var.ConfigSourceDir)\setup_a.config" > 
        <CopyFile Id="moveit" DestinationName="web.config"/> 
       </File> 
       </Component> 

... लेकिन नेस्टेड CopyFile मैं (यह अनुमति नहीं है) हटाएँ = "हाँ" विशेषता नहीं जोड़ सकते हैं इसका मतलब है एक 'चाल' कार्रवाई बनाएँ। इसके बजाय मुझे wwwroot फ़ोल्डर में setup_a.config और web.config दोनों के साथ छोड़ दिया गया है। वैकल्पिक रूप से, अगर मैं एक ही घटक तत्व के भीतर एक अलग removefile जोड़ने यह भी करता है कुछ भी नहीं:

<RemoveFile Id="removefile" On="install" Directory="wwwroot" Name="setup_a.config"/> 
</Component> 

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

चीयर्स!

उत्तर

7

आप इसे बहुत जटिल बनाते हैं। यह काम करना चाहिए:

<Component Id="setup_a" Guid="some_guid" > 
     <File Name="web.config" Id="config_a" Source="$(var.ConfigSourceDir)\setup_a\web.config" /> 
     <Condition>ENVIRON = setup_a</Condition> 
    </Component> 

    <Component Id="setup_b" Guid="some_guid" > 
     <File Name="web.config" Id="config_b" Source="$(var.ConfigSourceDir)\setup_b\web.config" /> 
     <Condition>ENVIRON = setup_b</Condition> 
    </Component> 

वेतन ध्यान यहाँ चीजों की एक जोड़ी के लिए:

  • फ़ाइल/@ नाम एक ही है - कि लक्ष्य फ़ाइल नाम आप करना चाहते हैं (वेब ​​है।config)
  • फ़ाइल/@ ईद आदेश प्रकाश त्रुटि आप का उल्लेख पहले से बचने के लिए प्रत्येक फ़ाइल के लिए अलग है
  • फ़ाइल/@ स्रोत कुछ भी हो सकता है - यह सिर्फ तुम क्या फ़ाइल एक स्रोत के रूप में लेने के लिए का वर्णन करता है

इस नमूना प्रकाश में अभी भी एलजीएचटी 1076 चेतावनी के साथ शिकायत होगी, लेकिन यह सिर्फ एक चेतावनी है - यह आपका ध्यान देता है कि समस्याओं को दूर करने के लिए स्थितियों पर पारस्परिक रूप से अनन्य होना चाहिए।

+0

अहह्ह नाम नाम की कमी की कमी मेरे फ़ाइल तत्वों को गड़बड़ कर रही थी, जिससे मुझे लगता है कि यह काम नहीं करेगा। आपका उदाहरण काम किया, धन्यवाद यान। –

+1

मैं इसे थोड़ा क्लीनर करता हूं (आईसीई सत्यापन चेतावनियों से बचें)। मैं घटक/फ़ाइलों को web.config-a और web.config के रूप में लिखता हूं और फिर इसे copy.ileig पर क्लोन करने के लिए एक CopyFile तत्व का उपयोग करता हूं। आईसीई अच्छा और साफ है। डाउनसाइड बॉक्स पर एक अतिरिक्त फाइल है। उल्टा यह है कि फाइल मुझे एक दृश्य सुराग देती है कि किस विकल्प को बनाया गया था और अगर कोई web.config को बदलता है और मैं वापस/वापसी करना चाहता हूं तो कुंवारी फ़ाइलों की एक प्रति। –

2

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

यह मुझे इंस्टॉलर बनाने की अनुमति देता है जो कुछ गुणों और कमांड लाइन को पास करके चुपचाप कहीं भी तैनात किया जा सकता है।

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