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