2014-02-14 47 views
3

我試圖使用InstallShield MSBuild任務在我們的生成機器上生成安裝程序,並將輸出放在drop文件夾中。我可以生成安裝程序,但它仍位於源代碼樹中。使用MSBuild重定向InstallShield的輸出

我在任務中嘗試使用OutDir。這在我的本地機器上工作,但它改變了實際的.ism文件;因此,在構建機器上失敗。

接下來,我嘗試使用TaggedOutputs ItemGroup。我只是不知道如何使它工作。我的輸出中沒有看到任何更改。這是我的腳本:

<ItemGroup> 
    <!-- The TaggedOutputs items allow you to explicitly add extra files to output groups. Each item must include both Name and OutputGroup, as well as TargetPath metadata values. --> 
    <TaggedOutputs Include="P:\"> 
      <Name>AvApp</Name> 
      <OutputGroup>Primary output</OutputGroup> 
      <TargetPath>My Test Exe.exe</TargetPath> 
     </TaggedOutputs> 
</ItemGroup> 

<!-- Run interactive InstallShield on the developer machine --> 
<InstallShield Project="R:\src\Setup\AvSetup\AvSetup.ism" 
       ProductConfiguration="Product Configuration 1" 
       ReleaseConfiguration="Release 1" 
       OutputGroups="$(TaggedOutputs)" 
       /> 

其中P映射到目標位置。

我的語法不正確,還是有其他標籤可以使用? InstallShield版本是2012.

回答

3

InstallShield的目標文件具有此內置但它的設計不正確,只能基於某些假設可能不正確。

我喜歡做的方式是:

1)在一個名爲ISBUILDDIR的ISM定義路徑變量,並給它一個定義的

<ISProjectDataFolder>  

2)價值在產品配置,發佈配置,請將生成發佈位置設置爲\ ProductName

這基本上爲您提供了一種抽象,默認情況下,其性能與以前相似,但可以在構建過程中被覆蓋。

3)在您的.ISPROJ(的MSBuild)創建以下項目組:

<ItemGroup> 
    <InstallShieldPathVariableOverrides Include="$(OutDir)"> 
     <PathVariable>ISBUILDDIR</PathVariable> 
    </InstallShieldPathVariableOverrides> 
</ItemGroup> 

現在$(OUTDIR)屬性將被分配到ISBUILD路徑變量,將產品/釋放配置輸出$(OutDir)\ ProductName在TFS Build的情況下,$(OutDir)被賦值$(BinariesRoot),所以你的編譯輸出將被拾取並放置在放置位置歸檔中。