2010-04-09 12 views
8

मैं wix में प्रीप्रोसेसर चर सेट करने की कोशिश कर रहा हूं और मैं इस पर एक उदाहरण नहीं ढूंढ पा रहा हूं या इंटरनेट पर कहीं भी इसे कैसे करना है, मुझे उम्मीद है कि मैं किसी को यहां उम्मीद कर रहा हूं मुझे समझा सकता है या दिखा सकता है कि मैं गलत कहां जा रहा हूं!WIX हीट डायरेक्टरी कार्य - प्रीप्रोसेसर सेट करने योग्य

मैं उदाहरण स्थापित करने के बारे में वर यहाँ दिखाया गया है की कोशिश की wix में HeatDirectory taks का उपयोग कर यहां पाया जा सकता के लिए http://www.ageektrapped.com/blog/setting-properties-for-wix-in-msbuild/

प्रलेखन को महत्व देता है और सब पर बहुत उपयोगी नहीं है है!

मैं किसी अन्य चर नाम के लिए SourceDir को प्रतिस्थापित करने के लिए प्रीप्रोसेसर को कैसे सेट कर सकता हूं?

+1

मुझे यह जवाब मिल गया: http://stackoverflow.com/a/4280454/11421 –

उत्तर

3

मुझे पता चला कि यह क्या था, विभिन्न चीजों की कोशिश करने के 1 दिन बाद, ऊपर दिया गया लिंक सही है लेकिन गर्मी डायरेक्टरी कार्य में var का उपयोग करने के लिए आपको इसे ऐसा करना है।

<HarvestDirectory Include="$(ProjectDirectory)\" > 
     <DirectoryRefId>WEBDIR</DirectoryRefId> 
     <KeepEmptyDirectories>true</KeepEmptyDirectories> 
     <SuppressRegistry>true</SuppressRegistry> 
     <ComponentGroupName>DynamicWebFiles</ComponentGroupName> 
     <PreprocessorVariable>var.WixDynamicSourceDirectory</PreprocessorVariable> 
    </HarvestDirectory> 
3

वहाँ एक $(HeatDefinitions) संपत्ति आप माता-पिता .wixproj फ़ाइल में इन परिभाषित करने के लिए सेट कर सकते हैं:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <HeatDefinitions>MySourcePath=..\src\Your.App\bin\Release</HeatDefinitions> 
    </PropertyGroup> 

    <ItemGroup> 
     <Compile Include="Phoenix.wxs" /> 
     <Compile Include="_HeatGeneratedFileList.wxs" /> 
    </ItemGroup> 

    <Target Name="BeforeBuild"> 
     <HeatDirectory Directory="..\src\Your.App\bin\Release" 
         OutputFile="_HeatGeneratedFileList.wxs" 
         PreprocessorVariable="var.MySourcePath" /> 
    </Target> 
</Project> 

इस जादू संपत्ति मैं (पूरे इंटरनेट पर) प्राप्त कर सकते हैं की केवल मौजूदा उल्लेख है Wix-users मेलिंग सूची पर a single question about Team Build में। अपरिभाषित प्रीप्रोसेसर चर त्रुटियों को ठीक करने की कोशिश कर रहे मेरे बालों को फाड़ने के लगभग एक दिन खर्च करने के बाद मैं भाग्य से इसे ठोकर खा गया।

+3

यदि आप उस मेलिंग सूची पोस्ट में wixproj स्निपेट देखते हैं, तो आप थोड़ा सा < $ (हीटडिफिनिशन) देखेंगे '... वह जगह है जहां" जादू "है, यह उस चर को" वास्तविक "चर में विभाजित कर रहा है। यह इस तरह से विभाजित है इसलिए उन्हें डीबग बनाम रिलीज के लिए खुद को दोहराना नहीं है। – Cheetah

16

प्रीप्रोसेसर गर्मी के लिए अविश्वसनीय रूप से अधिक डॉक्टर और उदाहरण की आवश्यकता है ... मैंने इसे काम करने में बहुत समय व्यतीत किया है। यह है कि यह कैसे मेरी wixproj फ़ाइल में काम करता है:

<PropertyGroup> 
    <DefineConstants Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">HarvestPath=..\distribution\Debug</DefineConstants> 
    <DefineConstants Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">HarvestPath=..\distribution\Release</DefineConstants> 
</PropertyGroup> 

<Target Name="BeforeBuild"> 
    <HeatDirectory Directory="..\distribution\$(Configuration)" 
       PreprocessorVariable="var.HarvestPath" 
       OutputFile="HeatGeneratedFileList.wxs" 
       ComponentGroupName="HeatGenerated" 
       DirectoryRefId="INSTALLFOLDER" 
       AutogenerateGuids="true" 
       ToolPath="$(WixToolPath)" 
       SuppressFragments="true" 
       SuppressRegistry="true" 
       SuppressRootDirectory="true"/> 
</Target> 

आपको बस चर को परिभाषित करने के लिए है। कोई जादुई "हीटडिफिनिशन" नहीं है :)

+5

मुझे यही चाहिए! एफडब्ल्यूआईडब्ल्यू एमएस वास्तव में कुछ संसाधनों को वाईएक्स में डालना चाहिए, यह एक हास्यास्पद स्थिति (दस्तावेज) है। –

+2

यह एक विशेषज्ञ (मेरे अलावा अन्य) के लिए स्पष्ट हो सकता है: किसी को उस var.HarvestPath चर को * wixproj * फ़ाइल में परिभाषित करना होगा। इसे बाद में विक्स कंपाइलर से प्रीप्रोकैसिंग चरण के दौरान ही बदला जा रहा है। इस काम को पाने के लिए मुझे कई घंटे लगे। –

0

मेरे पास विजुअल स्टूडियो 2013 में निर्माण करने के लिए एक बहुत बड़ी इंस्टॉलर किट है (इसमें मुख्य प्रोजेक्ट से संबंधित कुछ टूल, एक विंडोज़ सेवा और एक गैर-तुच्छ निर्देशिका संरचना वाला वेब अनुप्रयोग शामिल है)। मैं अभी भी सीख रहा हूं कि वाईएक्स का उपयोग कैसे करें, और अभी भी वाईएक्स प्रोजेक्ट का क्राफ्टिंग, परीक्षण और परिष्करण कर रहा हूं। ": \ Program Files (x86) \ WiX टूलसेट v3.9 \ बिन \ heat.exe सी" dir "$ SolutionDir (वर्तमान में, मैं फसल कार्यों के निर्माण की घटनाओं के रूप में सेट अप, प्रपत्र

के एक आदेश का उपयोग किया है) \ MyProjectDir \ bin \ $ (ConfigurationName) "-cg MyComponentRef -ag -dr MYINSTALLDIR -srd -wixvar -var var.MySourceFiles -sreg -out" $ (SolutionDir) \ परिनियोजन \ मेरा इंस्टॉलर प्रोजेक्ट \ ComponentList.wxs "-t "$ (SolutionDir) \ परिनियोजन \ मेरा इंस्टॉलर प्रोजेक्ट \ FileFilter.xslt"

यह आदेश बस प्रोजेक्ट के बिन \ डीबग (या बिन \ रिलीज़) फ़ोल्डर में सभी फ़ाइलों को पकड़ लेता है, फिर इसे एक XML स्टाइलशीट ट्रांसफॉर्म का उपयोग करके फ़िल्टर करता है। इस तरह इकट्ठा करने के लिए बहुत सारे उपज हैं, इसलिए सभी स्रोत फ़ाइल चर ("var.MySourceFiles" कमांड में तर्क) को बनाए रखना कठिन और त्रुटि प्रवण हो रहा था। प्रारंभ में, मैंने प्रोजेक्ट के प्रीप्रोसेसर वैरिएबल में घोषणाएं जोड़ दी थीं, लेकिन मुझे कुछ ऐसा चाहिए जो थोड़ा और "आत्मनिर्भर" था। उपयोगी टिप्स मैं WiX tricks and tips में पाया का उपयोग करना, मैं एक नई सामग्री

साथ, फ़ाइल में शामिल हैं "PreprocessorVars.wxi" घोषित कर दिया और xslt गर्मी द्वारा उत्पन्न उत्पादन में शामिल हो गया।

<?xml version="1.0" encoding="utf-8"?> 
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"> 
     <?include 
       $(sys.CURRENTDIR)\PreprocessorVars.wxi 
      ?> 
     <Fragment> 
      <DirectoryRef Id="MYINSTALLDIR" /> 
     </Fragment> 
     <Fragment> 
      <ComponentGroup Id="MyComponentRef"> 
       <Component Id="xyz" Directory="MYINSTALLDIR" Guid="*"> 
        <File Id="abc" KeyPath="yes" Source="$(var.MySourceFiles)\MyProjectExecutable.exe" /> 
       </Component> 
      </ComponentGroup> 
     </Fragment> 
    </Wix> 

जो Wix किसी भी त्रुटि के बिना संसाधित करता है: टुकड़ा

<xsl:processing-instruction name="include"> 
     $(sys.CURRENTDIR)\PreprocessorVars.wxi 
    </xsl:processing-instruction> 

xslt अब उत्पादन है कि कुछ इस तरह दिखता का उत्पादन के साथ exe।

7

मैं Wix v3.10 का उपयोग करें।

स्पष्ट रूप से हीट डायरेक्टरी एमएसबिल्ड कार्य को कॉल करने की आवश्यकता नहीं है। विशेष नाम "हार्वेस्ट डायरेक्टरी" के साथ आइटम समूह तैयार किया जा सकता है, और बाद में "हार्वेस्ट डायरेक्टरी" लक्ष्य इसे संसाधित करेगा। * .wsx फ़ाइल इंटरमीडिएटऑटपुटपैथ में बनाई गई है और संकलन सूची (मोमबत्ती द्वारा संसाधित) में शामिल है।

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' "> 
... 
    <MyFinalFolder Condition=" '$(MyFinalFolder)' == '' ">$(MSBuildProjectDirectory)\Final\</MyFinalFolder> 
    <DefineConstants>FinalFolder=$(MyFinalFolder)</DefineConstants> 
</PropertyGroup> 

... 

<Import Project="$(WixTargetsPath)" /> 
<Target Name="BeforeBuild"> 
    <!-- 
    No need to explicitly call HeatDirectory MSBuild Task. 
    Instead follow documentation http://wixtoolset.org/documentation/manual/v3/msbuild/target_reference/harvestdirectory.html, which has sample and 
    important comment: 
    This target is processed before compilation. Generated authoring is automatically added to the Compile item group to be compiled by the Candle task. 
    So, *.wsx file created in the IntermediateOutputPath and included in Compile list (processed by Candle). 

    The following ItemGroup with special name "HarvestDirectory" can be prepared, and later the "HarvestDirectory" target will process it, see 
    C:\Program Files (x86)\MSBuild\Microsoft\WiX\v3.x\wix2010.targets 
    --> 
    <ItemGroup> 
    <HarvestDirectory Include="$(MyFinalFolder)"> 
     <DirectoryRefId>INSTALLFOLDER</DirectoryRefId> 
     <SuppressRootDirectory>true</SuppressRootDirectory> 
     <SuppressCom>true</SuppressCom> 
     <SuppressRegistry>true</SuppressRegistry> 
     <ComponentGroupName>FilesComponentGroup</ComponentGroupName> 
     <PreprocessorVariable>var.FinalFolder</PreprocessorVariable> 
    </HarvestDirectory> 
    </ItemGroup> 
</Target> 

wxs फ़ाइल:

<?xml version="1.0" encoding="utf-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Fragment> 
     <DirectoryRef Id="INSTALLFOLDER"> 
      <Component Id="cmp9AA09F4A73FA53E2BDDE4B7BB5C91DFB" Guid="*"> 
       <File Id="fil9AA09F4A73FA53E2BDDE4B7BB5C91DFB" KeyPath="yes" Source="$(var.FinalFolder)\7z.dll" /> 
      </Component> 
+1

इसके लिए धन्यवाद। एक Asp.NET कोर साइट के प्रकाशित आउटपुट के लिए सेटअप बनाने की कोशिश कर आधा दिन बिताया। आपको लगता है कि इंटरनेट पर बहुत कुछ सामान्य रूप से दस्तावेज किया जाएगा। आपका पहला जवाब है जो वास्तव में काम करता है। – Eternal21

+1

खुशी है कि यह आपके लिए काम करता है। ऐसा लगता है कि एमएसबिल्ड और WIX ने एएसपी.NET कोर प्रोजेक्ट के लिए भी बहुत कुछ नहीं बदला और अभी भी काम नहीं किया। –

3

मैं GitHub पर एक उदाहरण परियोजना दिखा कैसे सफलतापूर्वक HarvestDirectory target है, जो एक उच्च स्तर की बात यह है कि HeatDirectory कार्य कहता है उपयोग करने के लिए बनाया गया है। आपको सीधे हीट डायरेक्टरी कार्य को कॉल करने की आवश्यकता नहीं है।

https://github.com/DavidEGrayson/wix-example-harvest-directory

यहां सबसे महत्वपूर्ण हिस्से हैं: आप यहाँ उदाहरण कोड के सभी देख सकते

foo.wixproj

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <ProductVersion>1.0.0</ProductVersion> 
    <DefineConstants>ProductVersion=$(ProductVersion);ItemDir=items</DefineConstants> 
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
    <Platform Condition=" '$(Platform)' == '' ">x86</Platform> 
    <ProjectGuid>27e80d9b-d8b6-423a-a6ff-1d9c5b23bb31</ProjectGuid> 
    <SchemaVersion>2.0</SchemaVersion> 
    <OutputName>foo-$(ProductVersion)</OutputName> 
    <OutputType>Package</OutputType> 
    <DefineSolutionProperties>false</DefineSolutionProperties> 
    <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath> 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> 
    <OutputPath>bin\$(Configuration)\</OutputPath> 
    <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath> 
    <DefineConstants>Debug;ProductVersion=$(ProductVersion)</DefineConstants> 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' "> 
    <OutputPath>bin\$(Configuration)\</OutputPath> 
    <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath> 
    </PropertyGroup> 
    <ItemGroup> 
    <Compile Include="foo.wxs" /> 
    <HarvestDirectory Include="items"> 
     <DirectoryRefId>ItemDir</DirectoryRefId> 
     <ComponentGroupName>Items</ComponentGroupName> 
     <PreprocessorVariable>var.ItemDir</PreprocessorVariable> 
    </HarvestDirectory> 
    <WixExtension Include="WixUIExtension" /> 
    </ItemGroup> 
    <Import Project="$(WixTargetsPath)" /> 
</Project> 

foo.wxs

<?xml version="1.0" encoding="utf-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Name="Foo" 
      Version="$(var.ProductVersion)" 
      Manufacturer="Foo Inc." 
      Language="1033" 
      UpgradeCode="0c8504c9-4e62-4e2c-9e1c-4fbe1c478b37" 
      Id="*"> 

    <Package Description="Foo" 
      Manufacturer="Foo Inc." 
      Compressed="yes" 
      InstallerVersion="301" /> 

    <MajorUpgrade AllowDowngrades="no" 
        DowngradeErrorMessage="A newer version of this software is already installed." 
        AllowSameVersionUpgrades="no" /> 

    <Media Id="1" Cabinet="cabinet.cab" EmbedCab="yes" /> 

    <Property Id="ARPCOMMENTS"> 
     Foo package. 
    </Property> 
    <Property Id="ARPCONTACT">Foo Inc.</Property> 
    <Property Id="ARPURLINFOABOUT">https://www.example.com/</Property> 

    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder" Name="PFiles"> 
     <Directory Id="INSTALLDIR" Name="Foo"> 
      <Component Id="readme"> 
      <File Id="readme" Name="README.txt" Source="README.txt" /> 
      </Component> 
      <Directory Id="ItemDir" /> 
     </Directory> 
     </Directory> 
    </Directory> 

    <Feature Id="Software" 
      Title="Foo" 
      AllowAdvertise="no" 
      ConfigurableDirectory="INSTALLDIR"> 
     <ComponentRef Id="readme" /> 
     <ComponentGroupRef Id="Items" /> 
    </Feature> 

    <Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" /> 
    <UIRef Id="WixUI_InstallDir" /> 
    </Product> 
</Wix> 
+0

wxs फ़ाइल को शामिल करने के लिए धन्यवाद। –

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