¿Cómo recolectar archivos de contenido XNA usando WiX?

Idealmente, estaría tomando los resultados de la especificación del proyecto en sí, pero heat.exe no parece admitir contentproj archivos como un tipo de proyecto, ni recoge el contenido si paso en el principal del juego csproj.

Actualmente tengo un paso previo a la compilación que llama al calor en la carpeta de salida, pero eso (a) se siente sucio y (b) produce un montón de File etiquetas que hacen referencia a las rutas de origen en relación con la carpeta de salida, de modo que la compilación falla cuando no puede encontrarlas en relación con la carpeta del proyecto WiX.

Debo señalar que estoy usando Votive y el diseño de mi proyecto se ve así:

- Main solution
 - XNA "Metaproject" Folder
  - Game
   - bin/x86/Release (GameContent output appears here)
  - GameContent
 - WiX Project

Me gustaría mucho minimizar la cantidad de veces que tengo que especificar una ruta como "../../Game/Game/bin/x86/Release/Content", porque es propenso a errores y deprimente escribirlo. ¡Se agradecen los impulsos en la dirección correcta!

preguntado el 02 de julio de 12 a las 02:07

1 Respuestas

Suponiendo que un contentproj es solo una colección de archivos, lo que puede hacer es agregar la recolección directamente dentro del wixproj que está creando el instalador:

<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>

Deberá agregar esto manualmente al archivo wixproj y puede repetir el HarvestDirectory para cada directorio si necesita más de uno.

Para configurar el var.GameContentDir variable de preprocesador edite la propiedad DefineConstants:

<DefineConstants>GameContentDir=$(GameContentDir);</DefineConstants>

que establecerá la var del preprocesador en la propiedad msbuild:

<GameContentDir>$(SolutionDir)\GameContent</GameContentDir> 

lo que significa que luego puede modificar esto dependiendo de la configuración de compilación. Si no necesita modificar la ruta, simplemente establezca un valor estático en el <DefineConstants> propiedad.

Esto luego generará un archivo wxs en el directorio obj de cada compilación que luego se incluye suponiendo que haya incluido ComponentGroupName. Si ha incluido el que generó anteriormente en su wixproj, elimínelo, ya que obtendrá conflictos si el ComponentGroupName es el mismo.

Respondido 02 Jul 12, 17:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.