Wix

2010-06-10 20 views
8

के साथ सशर्त स्थापना क्या सशर्त स्थापना कॉन्फ़िगरेशन वातावरण के साथ एक सशर्त स्थापना कॉन्फ़िगरेशन संभव है?Wix

उदाहरण के लिए, DEBUG या रिलीज कॉन्फ़िगरेशन का चयन, Wix निर्मित स्थापना में विभिन्न निष्पादन योग्य का चयन करता है।

असल में मैं एक ही परियोजनाओं से अलग प्रतिष्ठानों का निर्माण करूंगा, लेकिन वे घटकों से अलग हैं। कुछ घटक एक ही परियोजना से बने होते हैं, लेकिन विभिन्न प्रीप्रोसेसर विकल्पों के साथ बनाया जाता है।

बेशक प्रत्येक आवश्यक घटक को शामिल करना संभव है, और फिर स्थापना के लिए एक विशिष्ट घटक का चयन करने के लिए सुविधाओं को परिभाषित करना संभव है, लेकिन मैं वास्तव में कुछ निष्पादन योग्य पुनर्वितरण नहीं करना चाहता हूं।

विभिन्न विक्स परियोजनाएं बनाना एकमात्र समाधान है?

उत्तर

6

प्रीप्रोसेसर का प्रयोग करें, उदाहरण: <?if?> सशर्त रूप से कॉन्फ़िगरेशन के आधार पर घटकों को शामिल/बहिष्कृत करने के लिए।

+0

मैंने नहीं सोचा है कि विक्स प्रीप्रोकैसिंग कर सकता है! मुझे आदमी मिला है http://wix.sourceforge.net/manual-wix2/preprocessor.htm – Luca

8

आपकी विक्स स्क्रिप्ट्स को कॉन्फ़िगरेशन ('डीबग' या 'रिलीज़') जैसे पैरामीटर बनाने के लिए उपयोग है। इसलिए सशर्त अपने घटक घोषणाओं में $ संदर्भित (var.Configuartion) द्वारा मौजूदा विन्यास के लिए सही बाइनरी शामिल कर सकते हैं:

<Component Id="myProject.dll" 
       DiskId="1" 
       Guid="*"> 
    <File Id="myProject.dll" 
      Name="myProject.dll" 
      Source="..\myProject\bin\$(var.Configuration)\myProject.dll" /> 
</Component> 

जब आप को रिलीज़ मोड में निर्माण चलाने के लिए, इस स्क्रिप्ट का रिलीज़ संस्करण लेने जाएगा द्विआधारी इसी तरह, डीबग मोड में, डीबग बाइनरी उठाई जाएगी। इस दृष्टिकोण को प्रीप्रोकैसिंग की आवश्यकता नहीं है - स्क्रिप्ट बिल्ड समय पर कॉन्फ़िगरेशन से संबंधित निर्णय लेती है।

+1

यह पथ खोजने के लिए बहुत अच्छा है - लेकिन अगर मैं * सशर्त रूप से * कुछ फाइलों को शामिल करना चाहता हूं और दूसरों को नहीं? (इसलिए, पूछा गया प्रश्न।) उदाहरण के लिए, डीबग बिल्ड के साथ, मैं .pdb फ़ाइलों को शामिल करना चाहूंगा, और रिलीज बिल्ड के साथ उन्हें शामिल नहीं कर सकता (क्योंकि फाइलें कभी-कभी 20+ एमबी की तरह होती हैं)। – BrainSlugs83

9

अन्य दो उत्तरों और लुका के research को एक साथ रखकर मैं इस समाधान के साथ आया, जो काम करता है (ध्यान दें कि स्ट्रिंग तुलना केस संवेदनशील होती है, और उद्धरणों की कमी सही प्रतीत होती है, मैंने परीक्षण किया है यह वाईएक्स 3.7 के साथ):

<?if $(var.Configuration) = Debug ?> 
    <!-- DEBUG ONLY --> 

    [ ... insert debug only XML here ... ] 

    <!-- END DEBUG ONLY --> 
<?else?> 
    <!-- RELEASE ONLY --> 

    [ ... insert release only XML here ... ] 

    <!-- END RELEASE ONLY --> 
<?endif?> 
+2

'' ' – Bishoy

+0

@ BrainSlugs83 होना चाहिए" मुझे "बीमार प्रीप्रोसेसर वेरिएबल '$ (कॉन्फ़िगरेशन)' मिल रहा है। चर के पास एक उपसर्ग होना चाहिए (जैसे 'var।', 'Env।', या 'sys। ') और कम से कम 1 वर्ण लंबा है। यदि शाब्दिक स्ट्रिंग' $ (कॉन्फ़िगरेशन) 'वांछित है, तो' $$ (कॉन्फ़िगरेशन) 'का उपयोग करें। कोई विचार? – user95227

+0

@ user95227 नज़दीक देखो, यह '$ (var.Configuration) '' '' (कॉन्फ़िगरेशन) 'नहीं। – BrainSlugs83