我正在尝试使用 InstallShield MSBuild 任务在我们的构建计算机上生成安装程序并将输出放入放置文件夹中。我可以生成安装程序,但它仍然位于源代码树中。
我尝试在任务中使用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。
最佳答案
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),因此您的构建输出将被拾取并放置在放置位置存档中。
关于msbuild - 使用 MSBuild 重定向 InstallShield 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21768612/