2010-01-14 19 views
38

मैं क्रम में WiX उपयोग करने के लिए शुरू कर स्वचालित है करने के लिए MSI मेरी सी # परियोजनाओं के के बनाने के लिए और त्रुटि "अपरिभाषित पूर्वप्रक्रमक चर '$ (var.MyProject.TargetDir)'"WiX अपरिभाषित पूर्वप्रक्रमक चर

का सामना कर रहा हूँ बनाता है

मैं नवीनतम वाईएक्स v3.0.5419 का उपयोग कर रहा हूं। अंदर मेरी wxs फाइल मैं पूर्व प्रोसेसर चर है कि इस वेबपेज पर सूचीबद्ध हैं उपयोग करने के लिए कोशिश कर रहा हूँ (http://blogs.msdn.com/jrock/archive/2008/01/29/complete-list-of-candle-preprocessor-variables.aspx)

<Component Id="MyId" Guid="MyGuid"> 
    <File Id="MyId" Name="MyName" KeyPath="yes" 
     Source="$(var.MyProject.TargetDir)\MyName.dll" /> 
</Component> 

मैं .wixproj को MyProject के लिए संदर्भ जोड़ लिया है और मैं यह कर सकते हैं अगर मैं इसे नोटपैड में खोलने के ऊपर संदर्भ देखें।

<ItemGroup> 
    <ProjectReference Include="..\MyProject.csproj"> 
    <Name>MyProject</Name> 
    <Project>{guid}</Project> 
    <Private>True</Private> 
    </ProjectReference> 
</ItemGroup> 

यह मेरी नैन बिल्ड स्क्रिप्ट है जिसका उपयोग मैं एमएसआई बनाने के लिए करता हूं। शायद ऐसा इसलिए है क्योंकि .wixproj परियोजना संदर्भ के बारे में जानता है जिसका निर्माण में उपयोग नहीं किया जाता है?

<exec basedir="${tools.wix}" managed="true" program="candle.exe"> 
    <arg line='-out "${tools.wix.objfile}"' /> 
    <arg value="../MySetup.wxs" /> 
</exec> 

क्या कोई मुझे इस पर प्रबुद्ध कर सकता है?

उत्तर

40

जैसा कि आपने पहले से ही टिप्पणी की है, आपकी नैन बिल्ड स्क्रिप्ट wixproj फ़ाइल का उपयोग नहीं कर रही है।

आप यहाँ एक wix सेटअप का निर्माण करने के दो अलग अलग तरीकों मिश्रण कर रहे हैं:

  1. आप candle.exe और light.exe कमांड लाइन उपकरण सीधे उपयोग कर सकते हैं। यह .wixproj फ़ाइल को अनदेखा करता है। यह वही है जो आप अपने नैन बिल्ड स्क्रिप्ट में कर रहे हैं। $(var.MyProject.TargetDir) जैसे प्रीप्रोसेसर चर के लिए मूल्यों को पास करने के लिए, -dMyProject.TargetDir=c:\foo जैसे विकल्पों का उपयोग करें।

  2. आप वोटक के साथ एक .wixproj फ़ाइल (विक्स के लिए दृश्य स्टूडियो ऐड-ऑन) लिख सकते हैं। सभी दृश्य स्टूडियो प्रोजेक्ट फ़ाइलों की तरह, एक wixproj फ़ाइल वास्तव में एक msbuild फ़ाइल है जिसे msbuild.exe के साथ बनाया जा सकता है। यदि सही परियोजना संदर्भ मौजूद है तो $(var.MyProject.TargetDir) जैसे वेरिएबल स्वचालित रूप से msbuild कार्यों द्वारा सेट किए गए हैं।

मैं तुम्हें <msbuild>nant task साथ wixproj फ़ाइल का निर्माण सलाह देते हैं। यह सुनिश्चित करता है कि आपका नैन बिल्ड वही करता है जब आप दृश्य स्टूडियो से मैन्युअल रूप से सेटअप बनाते हैं।

+0

बहुत बहुत धन्यवाद। मुझे अभी पता चला है कि wixproj एक msbuild फ़ाइल है और मैं वास्तव में पहले से ही अपने समाधान के निर्माण के माध्यम से इसे सही ढंग से बना रहा था! – David

+1

बस एक त्वरित सिर के रूप में - विकल्प निर्दिष्ट करने का सही तरीका -DMyProject.TargetDir होगा। अग्रणी var। गलत है http://geekswithblogs.net/Howard/archive/2009/01/20/wix-variables.aspx –

+0

@ सेन: सुधार के लिए धन्यवाद। फिक्स्ड। –