理想情况下,我会从项目规范中获取输出,但是heat.exe似乎不支持contentproj
个文件作为项目类型,如果我传入的话,它也不会获取内容游戏的主要csproj
。
目前我有一个预编译步骤,在输出文件夹上调用heat,但是(a)感觉很脏,并且(b)产生一堆引用相对于输出文件夹的源路径的File
标签,如果相对于WiX项目的文件夹找不到它们,则构建失败。
我应该注意到我正在使用Votive,我的项目布局如下:
- Main solution
- XNA "Metaproject" Folder
- Game
- bin/x86/Release (GameContent output appears here)
- GameContent
- WiX Project
我非常希望尽量减少指定"../../Game/Game/bin/x86/Release/Content"
这样的路径的次数,因为这很容易出错并且输入很难。正确方向的产品值得赞赏!
答案 0 :(得分:2)
假设contentproj只是一个文件集合,您可以做的是直接在创建安装程序的wixproj中添加收获:
<PropertyGroup>
<HarvestDirectoryNoLogo>true</HarvestDirectoryNoLogo>
<HarvestDirectorySuppressFragments>true</HarvestDirectorySuppressFragments>
<HarvestDirectorySuppressUniqueIds>true</HarvestDirectorySuppressUniqueIds>
<HarvestDirectoryAutogenerateGuids>true</HarvestDirectoryAutogenerateGuids>
</PropertyGroup>
<ItemGroup>
<HarvestDirectory Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "
Include="$(SolutionDir)\GameContent">
<DirectoryRefId>INSTALLDIR</DirectoryRefId>
<SuppressRootDirectory>true</SuppressRootDirectory>
<PreprocessorVariable>var.GameContentDir</PreprocessorVariable>
<ComponentGroupName>GameContent</ComponentGroupName>
</HarvestDirectory>
</ItemGroup>
您需要手动将其添加到wixproj文件中,如果需要多个目录,可以为每个目录重复HarvestDirectory。
要设置var.GameContentDir
预处理器变量,请编辑DefineConstants属性:
<DefineConstants>GameContentDir=$(GameContentDir);</DefineConstants>
将预处理器var设置为msbuild属性:
<GameContentDir>$(SolutionDir)\GameContent</GameContentDir>
这意味着您可以根据构建配置修改此依赖项。如果您不需要修改路径,只需在<DefineConstants>
属性中设置静态值。
然后,这会在每个构建的obj目录中生成一个wxs文件,然后假定您已包含ComponentGroupName。如果你包含了之前在wixproj中生成的那个,那么删除它,因为如果ComponentGroupName是相同的,你将会遇到冲突。