2009-11-06 11 views
19

का नाम सेट करें, मैं अपनी wix परियोजनाओं के उत्पादन के एमएसआई फ़ाइल के फ़ाइल नाम में कुछ गतिशील भाग शामिल करना चाहता हूं।WIX: एमएसआई आउटपुट फ़ाइल का नाम गतिशील रूप से

<?define ProductVersion="7.1.0.1" ?> 

किसी लिंकर है कि wix चर की है कि मूल्य भेज एक के रूप में उपयोग करने के लिए करने का एक तरीका के बारे में पता है: यह गतिशील हिस्से चर जो मेरे wix परियोजना का हिस्सा हैं और इस तरह की घोषणा की जाती द्वारा नियंत्रित किया जाना चाहिए आउटपुट फ़ाइल नाम का हिस्सा?

वैसे: मैं Wix3

उत्तर

2

के बाद से यह सिर्फ एक फ़ाइल नाम है का उपयोग कर रहा है, क्यों एक के बाद निर्माण कार्रवाई कि आपका बिल्ड स्क्रिप्ट (MSBuild संभालने) में फ़ाइल का नाम बदलता नहीं?

+0

ठीक है, यह शायद काम करेगा। मैं कोशिश करूँगा। लेकिन मैं एक और सीधा रास्ता तलाश रहा था - या आपको लगता है कि यह wix में समर्थित नहीं है? मैंने यहां लिंकर चर के बारे में कुछ पढ़ा है: http://n2.nabble.com/Types-of-variables-question-td3825142.html ! (Wix.Name) जिसे WixVariables कहा जाता है (स्रोत कोड में परिभाषित किया जा सकता है WixVariable तत्व के साथ, या प्रकाश की कमांडलाइन पर पारित किया गया है और/या प्रीप्रोसेसर चर के रूप में उसी तरीके से जलाया जाता है जैसे मोमबत्ती को पारित किया जाता है)। लेकिन ऐसा लगता है कि यह काम नहीं करता है। – Jan

+1

मैंने इस तरह से उल्लेख किया क्योंकि यह इसे संभालने का सबसे तेज़ और सरल तरीका है। कई अन्य विकास समस्याओं की तरह, हमेशा केआईएसएस को याद रखें। –

+5

एमएसआई का नाम बदलना एक बुरा विचार है। ऐसा मत करो! http://blogs.msdn.com/b/robmen/archive/2004/12/08/278746.aspx – l33t

15

एमएसआई फ़ाइल नाम आपकी wix फ़ाइलों द्वारा निर्धारित नहीं है, लेकिन light.exe -out स्विच द्वारा। तुम्हें पता है, अगर आप अपने निर्माण लिपि में निम्नलिखित है -out के लिए और अपने wix फ़ाइलों के अंदर एक ही मूल्य का उपयोग कर सकते संभालने यह एक बैच स्क्रिप्ट है:

  • को set productversion=1.2.3
  • पास -out foo%productversion%.msi साथ एक वातावरण चर सेट light.exe लिंकर
  • $(env.productversion)
-5
Product Id="GUID" Name="whatevername $(var.ProductVersion)" 
रूप अपने wix फाइलों में ही वातावरण चर का उपयोग
+0

यह नियंत्रित करता है कि एमएसआई का फ़ाइल नाम नहीं, प्रोग्राम जोड़ें/निकालें में उत्पाद कैसे प्रदर्शित होता है। – Rozwel

0

क्या वाईएक्स में चर को परिभाषित किया जाना है? मैं एमएसबिल्ड से अपनी सेटअप बाइनरी बना रहा हूं, और मैंने बस आउटपुट फ़ाइल का नाम MyProject_$(Platform) पर सेट किया है - मुझे उम्मीद है कि कोई भी एमएसबिल्ड परिवर्तनीय प्रतिस्थापन समान रूप से अच्छी तरह से काम करेगा।

35

आप अपने .wixproj के आउटपुट नाम को अपडेट कर सकते हैं और संस्करण संख्या या किसी भी अन्य वैरिएबल को पार करने के लिए एमएसबिल्ड चर का उपयोग कर सकते हैं।

मेरे निर्माण स्क्रिप्ट इस तरह दिखता है:

set PRODUCTVERSION=7.1.0.1 
MSBuild.exe /p:Configuration=Debug /p:ProductVersion=%PRODUCTVERSION% Installer.wixproj 

और मेरी WiX परियोजना इस तरह दिखता है:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
    <Platform Condition=" '$(Platform)' == '' ">x86</Platform> 
    <ProductVersion>1.0.0.0</ProductVersion> 
    <ProjectGuid>{b7415c44-8d59-4ac2-b698-03e399a305e3}</ProjectGuid> 
    <SchemaVersion>2.0</SchemaVersion> 
    <OutputName>Installer.$(ProductVersion)</OutputName> 
    ... 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> 
    <OutputPath>bin\$(Configuration)\</OutputPath> 
    <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath> 
    <DefineConstants>Debug</DefineConstants> 
    <WixVariables>ProductVersion=$(ProductVersion)</WixVariables> 
    </PropertyGroup> 
    ... 
</Project> 

उत्पादन होगा:

Installer.7.1.0.1.msi 
+2

मुझे लगता है कि यह एक मील से सभी का सबसे अच्छा जवाब है .. – ostati

+1

वास्तव में जो मैं खोज रहा था, धन्यवाद! दुर्भाग्य से विजुअलस्टूडियो को ' $ (ProductName)' बॉक्स से बाहर कुछ ऐसा प्रतीत नहीं होता है। मेरे लिए परिदृश्य यह एक डिफ़ॉल्ट मान प्रदान करने के लिए पर्याप्त था (मुख्य रूप से विजुअलस्टूडियो के माध्यम से मानव द्वारा निर्मित: ' एप्लिकेशनसेटअप ') पास करें और पास करें @Charlie के रूप में वास्तविक मूल्य वर्णित है (जब msbuild के माध्यम से बिल्ड सर्वर द्वारा चलाया जाता है)। – CodeFox

+1

यह स्वीकार्य उत्तर होना चाहिए ... ठीक वही था जो मुझे चाहिए (साथ ही @CodeFox से परिशिष्ट)। – Jon

0

आप कई विन्यास है, तो .wixprj फ़ाइल के भीतर आप निम्नलिखित

012 कर सकते हैं
<OutputName Condition="'$(Configuration)' == 'User'">User.Setup</OutputName> 
<OutputName Condition="'$(Configuration)' == 'Designer'">Designerr.Setup</OutputName> 
1

मैंने पाया महान संदर्भ पदों के एक जोड़े सिर्फ इस आपरेशन करने के लिए:

http://blog.tentaclesoftware.com/archive/2009/05/03/38.aspx

और एक अनुवर्ती पर एक पूर्व निर्माण घटना का उपयोग कर उत्पादन फ़ाइल बनाने का एक बेहतर तरीका के साथ:

http://blog.tentaclesoftware.com/archive/2010/08/05/99.aspx

मैं जानता हूँ कि लिंक पुरानी हैं, लेकिन विधि ध्वनि है।

  • संस्करण आप आप अपने प्रोजेक्ट से उपयोग कर सकते हैं एक फ़ाइल में उपयोग करना चाहते हैं रखो:

    यहाँ बुनियादी कदम हैं। मैं अपने इंस्टॉलेशन के मुख्य निष्पादन योग्य का उपयोग करता हूं क्योंकि मैं अपने संस्करण में उस संस्करण से भी जुड़ा हूं। मेरे मामले में, चूंकि मैं सी # के साथ निर्माण कर रहा हूं और एसवीएन का उपयोग कर रहा हूं, मेरे पास मेरे assembly.cs, assembly.cs.txt का एक टेम्पलेट संस्करण है, जो मैं subwcrev को प्री-बिल्ड ईवेंट के रूप में चलाता हूं ताकि विधानसभा.cs मिल सके मेरे निष्पादन योग्य में संकलित (मैं वास्तव में इसे अपने समाधान में एक अलग परियोजना में करता हूं)। Subwcrev कुछ तारीख और संशोधन जानकारी डालता है जिसका उपयोग मैं "major.minor.version.0" रूप में एक संस्करण बनाने के लिए करता हूं जहां मैं अपने संस्करण के लिए "year.month.revision.0" का उपयोग करता हूं।

  • अब, मैं आम तौर पर सिर्फ AssemblyFileVersion इस विधि के साथ सेट है, लेकिन wixproj निर्माण घटना ऊपर पोस्ट में संदर्भित में मेरी संस्करण संख्या का उपयोग करने में सक्षम हो, मैं भी के बाद से है कि क्या साथ पहुँचा जा सकता AssemblyVersion निर्धारित करने की आवश्यकता GetAssemblyIdentity। यह विधि संदिग्ध होगी अगर मैं वास्तव में किसी अन्य व्यक्ति के असेंबली का उपयोग कर रहा था, लेकिन मेरे लिए यह ठीक है क्योंकि यह मेरे अंतिम आवेदन निष्पादन योग्य है।

  • दूसरी पोस्ट में उल्लिखित चरणों का पालन करें (पहली पोस्ट wxs में संस्करण के लिए बाध्यकारी विधि का उपयोग करके चर्चा करती है और wixproj को अनलोड और संपादित करने के लिए कैसे - दूसरी पोस्ट के लिए मूल्यवान संदर्भ)।

एक आकर्षण की तरह काम करता है!

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