[BLOG] .NET Blog Draft#521
Conversation
There was a problem hiding this comment.
Pull request overview
Adds a draft blog post documenting how WinApp CLI helps .NET developers run with package identity (via dotnet run) and create signed MSIX packages (via winapp pack), plus pointers to related docs and the VS Code extension.
Changes:
- Introduces a new blog draft covering
winapp init,dotnet runidentity enablement, and optional execution alias setup for console apps. - Adds a packaging walkthrough using
winapp cert generate,winapp pack, andwinapp cert install. - Includes links to supporting documentation, samples, and the VS Code extension.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Build Metrics ReportBinary Sizes
Test Results✅ 993 passed, 1 skipped out of 994 tests in 519.4s (+9.6s vs. baseline) Test Coverage❌ 16.7% line coverage, 34.8% branch coverage · ✅ no change vs. baseline CLI Startup Time41ms median (x64, Updated 2026-05-13 19:43:24 UTC · commit |
chiaramooney
left a comment
There was a problem hiding this comment.
Overall looks great!
| @@ -0,0 +1,142 @@ | |||
| # Packaging and Package Identity for .NET apps with winapp CLI | |||
|
|
|||
| Package identity has often been a pain point for developers looking to build apps that integrate with Windows APIs. Many modern Windows features, like push notifications or the AI APIs, are gated behind package identity. For Windows apps that are unpackaged by default (like .NET console or WPF applications), this meant wrestling with package manifests, build configurations, and certs to bring your app up to speed. | |||
There was a problem hiding this comment.
I wonder if there is a way to show the problems we are solving with the cli up front instead of just telling?
There was a problem hiding this comment.
Open to suggestions here - I'm not sure what the best way to do this would be without getting overcomplicated. Do you want more specifics on what was previously required?
Co-authored-by: Jaylyn Barbee <51131738+Jaylyn-Barbee@users.noreply.github.com>
Co-authored-by: Jaylyn Barbee <51131738+Jaylyn-Barbee@users.noreply.github.com>
Co-authored-by: Nikola Metulev <nmetulev@users.noreply.github.com>
Co-authored-by: Jaylyn Barbee <51131738+Jaylyn-Barbee@users.noreply.github.com>
Co-authored-by: Jaylyn Barbee <51131738+Jaylyn-Barbee@users.noreply.github.com>
Co-authored-by: Jaylyn Barbee <51131738+Jaylyn-Barbee@users.noreply.github.com>
Co-authored-by: Jaylyn Barbee <51131738+Jaylyn-Barbee@users.noreply.github.com>
| winapp unregister | ||
| ``` | ||
|
|
||
| For more details on how exactly the winapp CLI works with dotnet under the hood, check out the [`dotnet run` support docs](https://github.com/microsoft/winappCli/blob/main/docs/dotnet-run-support.md). |
|
|
||
| Package identity has often been a pain point for developers looking to build apps that integrate with Windows APIs. Many modern Windows features, like push notifications or the AI APIs, are gated behind package identity. For Windows apps that are unpackaged by default (like .NET console or WPF applications), this meant wrestling with package manifests, build configurations, and certs to bring your app up to speed. | ||
|
|
||
| With the [**WinApp CLI**](https://github.com/microsoft/winappCli), you can quickly tackle the problem of package identity, both in the context of local running and debugging, and for packaging applications as MSIX for distribution. Inside the .NET ecosystem, WinApp supports .NET console, WPF, WinForms, and WinUI3 applications. |
There was a problem hiding this comment.
Really, we support any .net desktop framework, even things like avalonia, let's not limit it to just these, leave it open ended
| - Ensures the `TargetFramework` specified in your `.csproj` is targeting a compatible version of the Windows platform. This is required to properly enable access to Windows APIs. | ||
| - Adds three package references to your `.csproj`: | ||
| - `Microsoft.WindowsAppSDK` This dependency is the Windows SDK itself, and grants access to Windows APIs. | ||
| - `Microsoft.Windows.SDK.BuildTools` Windows Build Tools are required for packaging and signing your application. |
There was a problem hiding this comment.
I thought we are no longer adding the buildtools?
| - `Microsoft.WindowsAppSDK` This dependency is the Windows SDK itself, and grants access to Windows APIs. | ||
| - `Microsoft.Windows.SDK.BuildTools` Windows Build Tools are required for packaging and signing your application. | ||
| - `Microsoft.Windows.SDK.BuildTools.WinApp` This is the NuGet package for WinApp itself. This dependency enables seamless `dotnet run` usage via WinApp. | ||
| - Generates both a `Package.appxmanifest` and required asset files, placed in an `Assets` directory. These files are required to grant package identity. |
There was a problem hiding this comment.
Mention that if they already have a manifest or any of the above, it won't overwrite them
|
|
||
| If you want more control over the init experience, run without the `--use-defaults` flag. This will give you control over versioning, package and publisher name, and allow you to manage which dependencies are added to your project. | ||
|
|
||
| ### 2. Debug with `dotnet run` |
There was a problem hiding this comment.
We need a bit more meat here - for example, explain that because the winapp nuget package is referenced, when dotnet run is run, it will call winapp run to run the app packaged. You can also mention two other things here:
- how to disable running packaged when using dotnet run, what propoerty to use
- passing arguments to do things like getting debug output or launching via alias
Draft for .NET blogpost.
Let me know if you guys have any feedback, major or minor.