我正在尝试使用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年。
答案 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)所以您的构建输出将被拾取并放置在放置位置存档中。