这是用于复制单个文件的 WXS 文件内容
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="MergeRedirectFolder">
<Component Id="owcF3EB3D7C133F5B48E5859309ABDC2EE0" Guid="5a6040ae-b91e-47b6-8438-d9cd47fb947a">
<File Id="owfF3EB3D7C133F5B48E5859309ABDC2EE0"
Source="$(var.SourceDir)\api-ms-win-core-console-l1-1-0.dll" KeyPath="yes" />
</Component>
<Component Id="owcB0E3C7251F136710A0F11E0C18525364" Guid="f80e6202-0436-d488-52cf-827e37483096">
<File Id="owfB0E3C7251F136710A0F11E0C18525364"
Source="$(var.SourceDir)\api-ms-win-core-datetime-l1-1-0.dll" KeyPath="yes" />
</Component>
<Component Id="owc4B0AD9DF281D253C1207D4E82DEB0DD2" Guid="4ac4edbd-2c6a-8aed-125e-11237a36e4f8">
<File Id="owf0E5D53A7E23AE08AF9D984ADC41AC589"
Source="$(var.SourceDir)\publish\sos_amd64_amd64_4.6.26628.05.dll" KeyPath="yes" />
我已将我的源目录定义如下
<?define SourceDir="..\..\Services\bin\Debug\netcoreapp2.1\win7-x64\"?>
如何指定 WIX 来复制所有文件,而不是在每一行中指定一个?
为什么?
我在不同的机器上发布具有不同版本的输出文件,所以我不想在 WIX 配置中硬编码文件版本。
发布文件夹有以下文件取决于它发布的系统
在开发机器中,我有文件 sos_amd64_amd64_4.6.26725。06
在 Build machine中,我有文件 sos_amd64_amd64_4.6.26725。05
如果您看到 ,则上述文件中的版本不同。因此,由于 *.wxs 文件中的版本不匹配,Wix 构建失败。所以我想从文件夹中读取所有文件,而不是指定单个文件。
更新
通过自动生成组件文件解决的问题
<HeatDirectory OutputFile="ComponentsGenerated.wxs"
DirectoryRefId="INSTALLFOLDER"
Transforms="Filter.xslt"
ComponentGroupName="PublishedComponents"
SuppressCom="true"
Directory="..\..\Service\bin\$(Configuration)\netcoreapp2.1\win-$(Platform)\publish"
SuppressFragments="true" SuppressRegistry="true"
SuppressRootDirectory="true"
AutoGenerateGuids="false"
GenerateGuidsNow="true"
ToolPath="$(WixToolPath)"
PreprocessorVariable="var.BasePath" />
奖金
由于我必须安装和运行 Windows 服务,所以我使用了 Transforms 方法来删除组件 WXS 文件中生成的 EXE。
我现在喜欢 Wix!