> For the complete documentation index, see [llms.txt](https://elguerre.gitbook.io/de0an/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://elguerre.gitbook.io/de0an/capitulo-04-la-construccion.-los-cimientos/plantillas-de-proyecto-de-visual-studio.md).

# Proyecto Visual Studio

Una vez completada la instalación de Visual Studio, y el SDK de Windows como ya vimos en el capítulo uno, dispondremos de las plantillas de proyecto necesarias para la creación de nuestra aplicación. Podremos elegir el lenguaje de programación con el que nos sintamos más cómodos: C#, VB, C++ e incluso JavaScript (JS).

## Plantillas CSharp (C#) y Visual Basic (VB)

En la siguiente figura podemos ver cuáles son las plantillas de proyectos para aplicaciones UWP en C#. La imagen de la izquierda representa las plantillas nativas de proyectos mientras que la de la derecha, las denominadas “Template 10” (proyecto de la comunidad, sin cambios relevantes desde 2021) de las que iremos hablando a lo largo del capítulo.

![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-2fc4a2efe1ec530e873c68c9865951594a4644e3%2Fimage1.png?alt=media)

**Figura 01.- Plantillas C# y Template 10**

Donde:

* **Blank App**. Plantilla para crear un proyecto simple de una página que se puede utilizar como punto de partida para cualquier aplicación y no define ningún control contenedor.
* **Class Library**. Crea un proyecto básico de librería de clases (.*dll*).
* **Windows Runtime Component**. Crea un componente (.*winmd*) utilizado para la ejecución de cualquier tipo de tarea en segundo plano.
* **Unit Test App**. Crea un proyecto de tipo *test* para la implementación de pruebas unitarias.
* **Coded UI Test Project.** Crea un proyecto de tipo *test* para la implementación de pruebas de interfaz de usuario.

En la imagen vemos otras plantillas de proyecto “Template 10”, que, aun no formando parte de las nativas de Microsoft, podemos considerarlas esenciales dado que van a facilitarnos la creación de proyectos desde cero. Construiremos con ellas proyectos completos de tipo ***Hamburger*** donde haciendo uso de un control *SplitView*, conseguiremos el marco principal para la aplicación y su navegación. Proporciona ayudadores (o *helpers*), servicios y, otras clases que nos harán ahorrar tiempo y esfuerzo durante el desarrollo.

Tal y como dice su creador, Jerry Nixon: “*Nos van a permitir maximizar la genialidad y minimizar lo repetitivo*”.

Existen otros *frameworks* si bien, en el momento de escribir el libro, “Template 10” es uno de los más destacados y en el que nos apoyaremos para construir nuestra aplicación desde cero.

Lo instalaremos desde el menú “Tools – Extensions & Updates…” de Visual Studio, o bien, lo descargaremos e instalaremos desde este enlace: <https://github.com/Windows-XAML/Template10>.

{% hint style="info" %}
**Nota**: Las plantillas C# y Visual Basic (VB) son equivalentes por lo que evitaremos describirlas nuevamente. Sin embargo, no ocurre así con *Template 10*, dado que, únicamente se encuentran disponibles para C#.
{% endhint %}

## Plantillas C++

UWP proporciona también plantillas basadas en C++. La siguiente imagen muestra las mismas:

![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-f6f7470a39cb801eaf2f2d8a924a647900d89e0a%2Fimage2.png?alt=media)

**Figura 02.- Plantillas de proyecto Visual C++ para UWP**

Donde:

* **Blank App**. Crea un proyecto simple de una página que se puede utilizar como punto de partida para cualquier aplicación y no define ningún control contenedor.
* **DirectX 11 App y DirectX 12 App**. Crea un proyecto para usar DirectX 11 o 12, respectivamente.
* **DirectX 11 and XAML App**. Crea un proyecto para usar DirectX 11 y XAML
* **Unit Test App**. Crea un proyecto de tipo test para la creación de pruebas unitarias.
* **DLL (Dynamic Link Library)**. Crea una biblioteca nativa de vínculos dinámicos.
* **Static Library**. Crea una biblioteca estática nativa (.lib).
* **Windows Runtime Component**. Crea un componente (.winmd) utilizado para la ejecución de cualquier tipo de tarea en segundo plano.

## Plantillas JavaScript

Al igual que para C#, VB y C++, también disponemos de plantillas de JavaScript para UWP. Destinadas principalmente a desarrolladores Web.

![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-9f9aa1d30a6607fcc9b2b9f2b87434d264b59ecc%2Fimage3.png?alt=media)

**Figura 03.- Plantillas de proyecto JavaScript para UWP**

Donde:

* **Blank App**. Crea un proyecto simple de una página que se puede utilizar como punto de partida para cualquier aplicación y no define ningún control contenedor.
* **Blank App – Web Context**. Crea un proyecto simple que permite manejar contenido local como si se tratara de contenido web. Sin un Política de Seguridad de Contenido (CSP) predeterminada. Para acceder a las APIs de UWP, las URIs deben ser declaradas en el manifiesto de la aplicación, tal y como muestra siguiente figura, donde podemos ver un ejemplo para una página *Index.html*.

  ![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-d21880a16b701149f9cb08cff4ed66b855e32293%2Fimage4.png?alt=media)

**Figura 04.- Edición del manifiesto de la aplicación para permitir navegación a una página Index.html**

* **Hosted Web App.** Crea un proyecto de forma similar a la plantilla anterior, pero con la salvedad de que, en éste, la página de inicio es remota.
* **WinJS App.** Crea un proyecto usando WinJS[¹](/de0an/capitulo-04-la-construccion.-los-cimientos/que-hemos-aprendido.md#notas), con acceso directo a todas las APIs de UWP.
