这是用于复制单个文件的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
在构建机器中,我有文件 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!
答案 0 :(得分:2)
从创作中我可以看到您正在使用IsWiX(免责声明:我是作者)。 IsWiX旨在仅支持静态创作,而不支持您尝试执行的创作。我已经写过很多次关于为什么我觉得这样做更安全的博客,但是在Stack Overflow上讲这个故事通常并不会很顺利。
也就是说,IsWiX不会阻止您执行您想做的事情。通常,我建议您做的是:
在您的主安装项目的Code文件夹中,创建一个名为“ HarvestedComponents.wxs”的新wxs片段。
将此空文件提交给源代码管理,如果使用Git,则将其添加到您的.gitignore中。
在项目的预构建步骤中放置以下内容
C:\Program Files (x86)\WiX Toolset v3.11\bin\heat.exe" dir "$(SolutionDir)Deploy\Path-To-Some-Directory-To-Harvest" -dr INSTALLLOCATION -cg HarvestedComponents -gg -g1 -sf -srd -scom -sreg -ke -var "var.Deploy" -out "$(SolutionDir)ClientTools\Code\harvestedcomponents.wxs
您必须对其稍加调整,以匹配Features.wxs中所需的目录结构。
构建项目,并注意HarvestedComponents.wxs获取数据。您不想将其提交给源代码控制,但是如果您这样做,也不会受到伤害。我不会。
现在要将这些收集的组件连接到安装程序,您需要编辑Code \ Features.wxs。添加:
<ComponentGroupRef Id="HarvestedComponents" />
要与这些组件相关联的功能。
最终的MSI现在将把这些文件夹/文件以及您使用IsWiX在mege模块wxs中静态定义的任何内容动态地创作到MSI中。
注意:请注意,这种方法存在一些折衷。主要是:
http://blog.iswix.com/2007/06/dealing-with-very-large-number-of-files.html
我还想知道为什么您的sos工件是dev框上的06版本和build框上的05版本。多久更改一次?如果这仅仅是版本错误,并且工件很少更改,那么您可能正在解决错误的问题。如果已将版本确定为受构建环境控制并且经常更改,并且文件夹名称和文件名在版本之间更改,那么这可能是满足您需求的正确解决方案。