所以我的.wixproj 中有这个
<DefineConstants>ProductVersion=$(ProductVersion);backendDir=backend;frontendDir=frontend;hardwareDir=hardware</DefineConstants>
.....
<ItemGroup>
<Compile Include="Product.wxs" />
</ItemGroup>
<HarvestDirectory Include="frontend">
<DirectoryRefId>frontendDir</DirectoryRefId>
<ComponentGroupName>frontendComp</ComponentGroupName>
<PreprocessorVariable>var.frontendDir</PreprocessorVariable>
</HarvestDirectory>
<HarvestDirectory Include="backend">
<DirectoryRefId>backendDir</DirectoryRefId>
<ComponentGroupName>backendComp</ComponentGroupName>
<PreprocessorVariable>var.backendDir</PreprocessorVariable>
</HarvestDirectory>
<HarvestDirectory Include="hardware">
<DirectoryRefId>hardwareDir</DirectoryRefId>
<ComponentGroupName>hardwareComp</ComponentGroupName>
<PreprocessorVariable>var.hardwareDir</PreprocessorVariable>
</HarvestDirectory>
然后在Product.wxs中,我有:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLDIR" Name="FlexxEdge">
<Directory Id="frontendDir" Name="frontend"/>
<Directory Id="backendDir" Name="backend"/>
<Directory Id="hardwareDir" Name="hardware"/>
</Directory>
</Directory>
...
<Feature Id="Software"
Title="testInstaller"
Level="1"
ConfigurableDirectory="INSTALLDIR">
<ComponentGroupRef Id="frontendComp" />
<ComponentGroupRef Id="backendComp" />
<ComponentGroupRef Id="hardwareComp" />
</Feature>
因此,它可以工作并安装,但由于某种原因,前端和硬件文件夹在不应该嵌套的情况下被嵌套。后端文件夹很好。文件结构-应该是什么:
- frontend
- - Files
- backend
- - Files
- hardware
- - Files
安装程序之后是什么:
- frontend
- - frontend
- - - Files
- backend
- - Files
- hardware
- - hardware
- - - Files
我检查了实际的dirs,他们在项目中没有这个问题。
所以需要一些调试、构建和测试,但我最终发现了问题。
在Product.wxs中,我需要删除目录上的name字段。
...
<Directory Id="INSTALLDIR" Name="FlexxEdge">
<Directory Id="frontendDir"/> <-no name field here!
<Directory Id="backendDir"/>
<Directory Id="hardwareDir"/>
有了name字段,有人告诉它把它放在一个名为name的目录中,我已经引用了整个目录,所以它正在嵌套它。所以对于收获,只需使用directory-ref!
我记得在这个文件的另一个区域,Name函数引用了父目录,而不是我正在处理的目录。所以我建议小心名称字段。公平地说,在目录上的文档中,名称字段是";目录的名称&";。所以我觉得我需要它。显然不是。
然而,它并没有解释为什么后端文件夹在一段时间内都很好(经过几次构建,它最终也出现了嵌套文件夹的问题(。这是其中最奇怪的部分,但在看到这一点后,追踪问题变得更容易了。