Proposal: Easily enable building any Windows app from a single project template
Summary
Today, there are many different "types" of Windows apps:
- Unpackaged
- Packaged Desktop
- Sparse Packages
- UWP
The development workflow for all of these different app types is vastly different, and in the case of Sparse Packages, there is no tooling support whatsoever. This proposal is to unify all of these paradigms into a single template, and allow developers to choose which app type they are building by setting a single MSBuild property in their project file:
Unpackaged app
<PropertyGroup>
<WindowsPackageType>None</WindowsPackageType>
</PropertyGroup>
Sparse packaged app
<PropertyGroup>
<WindowsPackageType>Sparse</WindowsPackageType>
</PropertyGroup>
Packaged desktop app
<PropertyGroup>
<WindowsPackageType>Desktop</WindowsPackageType>
</PropertyGroup>
UWP app
<PropertyGroup>
<WindowsPackageType>Universal</WindowsPackageType>
</PropertyGroup>
Rationale
- The Windows app ecosystem is greatly divided in terms of developer experience. Project Reunion is all about bringing them together.
- It allows developers to be flexible in their app choices. They can start with a UWP, and easily change to Desktop with minimal changes.
- The tooling for this will be decoupled from VS, allowing for greater flexibility and also allow tooling and runtime to ship together.
Scope
| Capability |
Priority |
| Allow .NET developers to build UWP apps that use .NET6 |
Must |
| Allow developers to no longer require the Windows Application Packaging project for packaged Desktop |
Must |
| Allow developers to use the existing workflows for creating app packages and publishing to the store |
Must |
| No changes to package.appxmanifest in order to switch between Sparse Universal or Desktop app |
Must |
| Enable .NET developers to build unpackaged apps using .NET CLI |
Must |
| Integrate with .NET ClickOnce deployment publishing |
Must |
Allow developers to change WindowsPackageType in VS UI |
Should |
| Enable .NET developers to build Packaged apps using .NET CLI |
Could |
Important Notes
There should be some default behavior that users can expect. This will be defined as:
- If there is no Package.appxmanifest in the project, then
WindowsPackageType defaults to None
- If there is a Package.appxmanifest in the project, then
WindowsPackageType defaults to Desktop.
Open Questions
Is WindowsPackageType the right property name? Should the existence of the Package.appxmanifest default into a Sparse app, and then developers just choose their container/package? This would mean there are only two options: Desktop and Universal.
Proposal: Easily enable building any Windows app from a single project template
Summary
Today, there are many different "types" of Windows apps:
The development workflow for all of these different app types is vastly different, and in the case of Sparse Packages, there is no tooling support whatsoever. This proposal is to unify all of these paradigms into a single template, and allow developers to choose which app type they are building by setting a single MSBuild property in their project file:
Unpackaged app
Sparse packaged app
Packaged desktop app
UWP app
Rationale
Scope
WindowsPackageTypein VS UIImportant Notes
There should be some default behavior that users can expect. This will be defined as:
WindowsPackageTypedefaults toNoneWindowsPackageTypedefaults toDesktop.Open Questions
Is
WindowsPackageTypethe right property name? Should the existence of the Package.appxmanifest default into aSparseapp, and then developers just choose their container/package? This would mean there are only two options:DesktopandUniversal.