visual studio phone para microsoft for descargar app windows-phone-8 visual-studio-2013 msbuild windows-phone-8.1 appx

windows phone 8 - studio - ¿Cómo incluyo archivos de "contenido" en subdirectorios en el teléfono con Windows 8.1?



windows sdk for windows 7 (3)

Estoy trabajando en un proyecto con muchos archivos (un juego). Estos archivos pueden cambiar desde fuera de VS 2013, por ejemplo, por artistas. Los archivos están ubicados en subdirectorios y nuestro juego los espera allí. Por ejemplo images / items / block.png

Intenté usar un evento de construcción posterior

xcopy /C /Y /I /R /S /Q "$(SolutionDir)game_data/*" "$(TargetDir)"

y también con $ (LayoutDir). El problema no ocurre en nuestro proyecto de escritorio (tienda de Windows RT) porque simplemente copio los archivos en el directorio AppX de la compilación y cuando ejecuto, el exe los encuentra. Pero con Windows Phone ya no hay ningún directorio de AppX y NO lo copia en el teléfono.

¿Cómo incluyo archivos Y directorios de $ (SolutionDir) game_data en el paquete que se instala en el teléfono?

Preferiblemente una solución donde I:

  • No es necesario volver a crear toda la estructura de la subcarpeta en los filtros del Proyecto
  • No es necesario que especifique "Contenido = Sí" en las propiedades de cada archivo en cada subdirectorio.
  • No es necesario agregar o eliminar ningún archivo nuevo que los artistas agreguen al directorio.

La forma de resolver esto es así:

  • Escriba una herramienta que cambie el nombre de toda su estructura de directorios de esta manera:

    script/game/level.lua convierte en script#game#level.lua

  • A continuación, agregue todos los archivos (que están ahora en el directorio raíz) a su proyecto y establezca su propiedad Content = Yes

  • Cambia tus caminos en tu juego, reemplazando ''/'' por ''#''. Espero que ya haya retransmitido todas las llamadas fopen a una implementación específica de plataforma (como hacemos nosotros).

Podría escribir un script que agregue nuevos archivos, pero por ahora es bastante fácil hacerlo cada vez después de una actualización SVN que agrega nuevos archivos.


Si la gente está interesada en el archivo por lotes que uso para desempaquetar / empacar el AppX, aquí está:

@echo off @REM ================================== @REM User variables @REM ================================== set GAME_DIR=C:/development/MyAwesomeGame set GAME_VERSION=1.0.0.0 set PVK_PUBLISHER=SECRETSECRETSECRETSECRETSECRET @REM Uncomment for beta builds: @REM set APPX_BUILD=_Beta @REM Uncomment for debug builds: @REM set APPX_BUILD=_Debug set RESOURCETOOL_FLAVOR=compile_for_winrt set GAME_NAME=Game.WindowsPhone set GAME_TOOLS_DIR=%GAME_DIR%/tools set GAME_DATA_DIR=%GAME_DIR%/data set PFX_FILE=%GAME_DIR%/proj.win8.1/%GAME_NAME%_StoreKey.pfx set RESOURCETOOL_OUTPUT=%GAME_DIR%/processed_game_data/win8.1 set MY_START_DIR=%cd% @REM ================================== @REM Tools @REM ================================== set WIN_SDK_BIN_DIR=C:/Program Files (x86)/Windows Kits/8.0/bin/x64 if not exist "%WIN_SDK_BIN_DIR%" set WIN_SDK_BIN_DIR=C:/Program Files/Windows Kits/8.0/bin/x86 set WINRAR_EXE=%GAME_TOOLS_DIR%/WinRAR.exe set MAKECERT_EXE=%WIN_SDK_BIN_DIR%/makecert.exe set MAKEAPPX_EXE=%WIN_SDK_BIN_DIR%/makeappx.exe set SIGNTOOL_EXE=%WIN_SDK_BIN_DIR%/signtool.exe set POWERSHELL_EXE=%SYSTEMROOT%/system32/WindowsPowerShell/v1.0/powershell.exe set PVK_FILE=None set CER_FILE=None @REM ================================== @REM Prerequisites check @REM ================================== if not exist "%MAKECERT_EXE%" goto err_no_MAKECERT_EXE if not exist "%MAKEAPPX_EXE%" goto err_no_MAKEAPPX_EXE if not exist "%SIGNTOOL_EXE%" goto err_no_SIGNTOOL_EXE if not exist "%WINRAR_EXE%" goto err_no_WINRAR_EXE if not exist "%POWERSHELL_EXE%" goto err_no_POWERSHELL_EXE @REM ================================== @REM Build options @REM ================================== set do_verbose=n set do_all=y set build_arm_platform=y set build_win32_platform=y set do_delete_tmp_dir=y set do_copy_resources=y set do_unpack_source_appx=y set do_create_appx=y set do_sign_appx=y set do_install_appx=y set do_create_rar=y set /p do_all=Complete process? (default on) [y/n]: if not "%do_all%"=="n" goto skip_do_all set /p build_arm_platform=Build ARM? (default on) [y/n]: set /p build_win32_platform=Build Win32? (default on) [y/n]: set /p do_verbose=Verbose output? (default off) [y/n]: set /p do_delete_tmp_dir=Delete TMP dir? (default on [y/n]): set /p do_copy_resources=Copy resources? (default on [y/n]): set /p do_unpack_source_appx=Unpack AppX? (default on) [y/n]: set /p do_create_appx=Create AppX? (default on) [y/n]: set /p do_sign_appx=Sign AppX? (default on) [y/n]: set /p do_install_appx=Install AppX? (default off) [y/n]: set /p do_create_rar=Create Rar? (default on) [y/n]: :skip_do_all @REM ================================== @REM Build verbosity settings @REM ================================== set XCOPY_VERBOSE=/q if not "%do_verbose%"=="y" goto :skip_do_verbose @echo on set MAKEAPPX_VERBOSE=/v set XCOPY_VERBOSE= :skip_do_verbose @REM ================================== @REM Select current platform @REM ================================== if "%build_arm_platform%"=="n" goto end_arm_build set WIN8_PLATFORM=ARM goto run_appx_build :end_arm_build if "%build_win32_platform%"=="n" goto end_win32_build set WIN8_PLATFORM=Win32 goto run_appx_build :end_win32_build cd "%MY_START_DIR%" @echo ######## Done. ######## goto end @REM ================================== @REM Start platform dependent build here @REM ================================== :run_appx_build @REM ================================== @REM Platform AppX variables @REM ================================== set APPX_NAME=%GAME_NAME%_%GAME_VERSION%_%WIN8_PLATFORM%%APPX_BUILD% set APPX_DIR=%GAME_DIR%/AppPackages/%GAME_NAME%/%APPX_NAME%_Test set APPX_SOURCE_PATH=%APPX_DIR%/%APPX_NAME%.appx set APPX_TEMP_DIR=%APPX_DIR%/_TMP_TMP_TMP_ @REM ================================== @REM Remove temp dir @REM ================================== if "%do_unpack_source_appx%"=="n" if "%do_copy_resources%"=="n" if "%do_create_appx%"=="n" goto skip_temp_dir if "%do_delete_tmp_dir%"=="n" goto skip_delete_temp_dir @echo ######## Removing temporary directory ######## if exist "%APPX_TEMP_DIR%" call rmdir /S /Q "%APPX_TEMP_DIR%" if exist "%APPX_TEMP_DIR%" goto err_APPX_TEMP_EXISTS :skip_delete_temp_dir mkdir "%APPX_TEMP_DIR%" cd "%APPX_TEMP_DIR%" :skip_temp_dir @REM ================================== @REM Unpack source AppX @REM ================================== if "%do_unpack_source_appx%"=="n" goto skip_unpack_source_appx if not exist "%APPX_SOURCE_PATH%" goto err_no_APPX_SOURCE_PATH @echo ######## Unpacking source AppX ######## "%WINRAR_EXE%" x "%APPX_SOURCE_PATH%" :skip_unpack_source_appx @REM ================================== @REM Copy game resources @REM ================================== if "%do_copy_resources%"=="n" goto skip_copy_resources if not exist "%RESOURCETOOL_OUTPUT%" goto err_no_RESOURCETOOL_OUTPUT echo ######## Copying game''s resources ######## xcopy /C /Y /I /R /S %XCOPY_VERBOSE% "%RESOURCETOOL_OUTPUT%/*" "%APPX_TEMP_DIR%/*" xcopy /C /Y /I /R /S %XCOPY_VERBOSE% "%GAME_DATA_DIR%/shaders/*.cso" "%APPX_TEMP_DIR%/shaders" :skip_copy_resources @REM ================================== @REM Create AppX @REM ================================== if "%do_create_appx%"=="n" goto skip_create_appx @echo ######## Packaging new AppX ######## if exist "%APPX_SOURCE_PATH%" del "%APPX_SOURCE_PATH%" if exist "%APPX_SOURCE_PATH%" goto err_cant_delete_APPX_SOURCE_PATH call "%MAKEAPPX_EXE%" pack /l /o %MAKEAPPX_VERBOSE% /d "%APPX_TEMP_DIR%" /p "%APPX_SOURCE_PATH%" > NUL :skip_create_appx @REM ================================== @REM Check if AppX creation was succesfull @REM ================================== if "%do_create_appx%"=="n" if "%do_sign_appx%"=="n" if not "%do_install_appx%"=="y" goto skip_check_appx_created if not exist "%APPX_SOURCE_PATH%" goto err_no_APPX_SOURCE_PATH :skip_check_appx_created @REM ================================== @REM Sign AppX @REM ================================== if "%do_sign_appx%"=="n" goto skip_sign_appx @echo ######## Signing AppX file ######## if not exist "%PFX_FILE%" goto err_no_PFX_FILE "%SIGNTOOL_EXE%" sign /a /v /fd sha256 /f "%PFX_FILE%" "%APPX_SOURCE_PATH%" :skip_sign_appx @REM ================================== @REM Check for install script @REM ================================== if not "%do_install_appx%"=="y" if "%do_create_rar%"=="n" goto skip_install_script_check set APPX_INSTALLSCRIPT=%APPX_DIR%/Add-AppDevPackage.ps1 set APPX_CERTIFICATE=%APPX_DIR%/%APPX_NAME%.cer if not exist "%APPX_INSTALLSCRIPT%" goto err_no_APPX_INSTALLSCRIPT if not exist "%APPX_CERTIFICATE%" goto err_no_APPX_CERTIFICATE :skip_install_script_check @REM ================================== @REM Install AppX @REM ================================== if not "%WIN8_PLATFORM%"=="Win32" goto skip_install_appx if not "%do_install_appx%"=="y" goto skip_install_appx @echo ######## Installing AppX file ######## "%POWERSHELL_EXE%" "%APPX_INSTALLSCRIPT%" :skip_install_appx @REM ================================== @REM Create rar to distribute @REM ================================== if "%do_create_rar%"=="n" goto skip_create_rar cd %APPX_DIR% call "%WINRAR_EXE%" a "%GAME_DIR%/%APPX_NAME%.rar" "Add-AppDevPackage.resources" "Dependencies" "Add-AppDevPackage.ps1" "%APPX_NAME%.appx" "%APPX_NAME%.appxsym" "%APPX_NAME%.cer" :skip_create_rar @REM ================================== @REM Loop other platforms @REM ================================== if "%WIN8_PLATFORM%"=="ARM" goto end_arm_build if "%WIN8_PLATFORM%"=="Win32" goto end_win32_build @REM ================================= @REM Error messages @REM ================================== :err_APPX_TEMP_EXISTS @echo The temporary directory already exists and cannot be removed: @echo %APPX_TEMP_DIR% goto end :err_no_MAKECERT_EXE @echo Missing %MAKECERT_EXE% goto end :err_no_MAKEAPPX_EXE @echo Missing %MAKEAPPX_EXE% goto end :err_no_SIGNTOOL_EXE @echo Missing %SIGNTOOL_EXE% goto end :err_no_WINRAR_EXE @echo Missing %WINRAR_EXE% goto end :err_no_POWERSHELL_EXE @echo Missing %POWERSHELL_EXE% goto end :err_no_RESOURCETOOL_OUTPUT @echo Missing %RESOURCETOOL_OUTPUT% goto end :err_no_APPX_SOURCE_PATH @echo Missing %APPX_SOURCE_PATH% goto end :err_no_PFX_FILE @echo Missing %PFX_FILE% goto end :err_no_APPX_INSTALLSCRIPT @echo Missing %APPX_INSTALLSCRIPT% goto end err_no_APPX_CERTIFICATE @echo Missing %APPX_CERTIFICATE% goto end :err_cant_delete_APPX_SOURCE_PATH @echo Can''t delete %APPX_SOURCE_PATH% goto end :end pause


Tendrá que copiar los archivos lo suficientemente temprano para que se incluyan en el paquete de Appx. Su solución de copia en el directorio de Appx post-build en el escritorio está limitada a la máquina de creación que ejecuta la aplicación directamente desde su propia carpeta en lugar de realizar una implementación completa. Como los archivos no están en el paquete de implementación, no estarán disponibles en otros sistemas. Esto es más obvio en el teléfono, ya que siempre tendrá que implementar la aplicación antes de ejecutarla, pero en última instancia es lo mismo.

La forma manual es incluir los archivos en el proyecto de Visual Studio. Puede copiar los archivos en el directorio del proyecto, mostrar todos los archivos y luego seleccionar e incluir los nuevos archivos. Si no se agregan automáticamente como contenido (la mayoría de los tipos de imágenes, como el png en su ejemplo), deberá establecerlo explícitamente para que se incluyan en el paquete appx cuando se construya.

Este es más o menos el escenario que dijiste que no querías.

En su lugar, puede automatizar la adición de los elementos al archivo del proyecto. El archivo vcxproj es un archivo XML ( esquema aquí ) y puede escribir un script para agregar sus archivos de activos a ItemGroups en el proyecto y marcarlos como DeploymentContent:

<ItemGroup> <Image Include="images/items/block.png" /> <None Include="Assets/frotz.foo"> <DeploymentContent>true</DeploymentContent> </None> <None Include="Assets/wibble.foo"> <DeploymentContent>true</DeploymentContent> </None> </ItemGroup>

Por último, puede crear el paquete de aplicación usted mismo con makeappx.exe en lugar de dejar que Visual Studio lo haga por usted. Esto le permitirá tener control total sobre los archivos en el paquete, incluida la capacidad de extraerlos desde fuera del proyecto VS. Ver paquetes de aplicaciones e implementación y la documentación del paquete de aplicaciones (MakeAppx.exe) .