使用MSBuild重定向InstallShield的输出

时间:2014-02-14 00:33:57

标签: msbuild installshield

我正在尝试使用InstallShield MSBuild任务在我们的构建计算机上生成安装程序,并将输出放在drop文件夹中。我可以生成安装程序但它仍然位于源代码树中。

我尝试在任务中使用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年。

1 个答案:

答案 0 :(得分:3)

InstallShield的Targets文件内置了这个,但设计不正确,只能根据某些可能不正确的假设而起作用。

我喜欢这样做的方式是:

1)在ISM中定义一个名为ISBUILDDIR的路径变量,并为其定义一个

的值
<ISProjectDataFolder>    

2)在“产品配置,发布配置”下,将“构建版本”位置设置为\ ProductName

这实际上为您提供了一个抽象,默认情况下表现得像以前一样但可以在构建期间被覆盖。

3)在.ISPROJ(MSBuild)中创建以下项目组:

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

现在$(OutDir)属性将被分配给ISBUILD路径变量,产品/发布配置将输出到$(OutDir)\ ProductName在TFS构建的情况下,$(OutDir)被分配$(BinariesRoot)所以您的构建输出将被拾取并放置在放置位置存档中。