-
Notifications
You must be signed in to change notification settings - Fork 329
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Proposal: Easily enable building any Windows app from a single project template #491
Comments
Some feedback/questions after reading the referenced specification.
What if a customer doesn't want to assert PerMonitorV2 support in their fusion manifest? Or add comctl? Or OS compat guids? Or long file path support? (Example from our app.)
Consider adding a switch around this behavior as some customers may want to handle registration themselves or not register in some scenarios.
As a developer, I feel that dialog (and the subsequent property) are my only safeguards from accidentally bringing in code that does not support my app's target OS matrix. By disabling this dialog and fiddling with the property directly, I feel like I lose control over which OS versions I target. (Why does Reunion think it knows which TPV I want?)
The Windows Store Azure DevOps task is ... not good. Have you considered promoting StoreBroker use instead? Would like to see more detail in this area. I don't see any consideration for
Sounds okay on the surface. I wonder if adding a Example: enum {
None,
DesktopMsix,
DesktopMsixSparse,
Universal
} Or if you'd like to decouple the packaging technology from the enum: enum {
None,
Desktop,
DesktopSparse,
Universal
}
Property name sounds good. With regards to .appxmanifest sensing, I would prefer if no magic behavior occurs and if I chose the wrong WindowsPackageType, I'd fail. Defaulting to the most confusing / least used packaging format will also be super confusing. (Theoretical customer: Why is my MSIX empty?!) |
Some other miscellanea before I forget:
|
Thank you @riverar for the feedback!
@riverar they can opt-out. This is only about the default for new projects, projects with a lot of existing legacy will just move their apps forward.
This switch already exists, you can disable the compiler generated main by adding this:
The problem with the current TPV selector is it creates discrepancies between what we support and what you can choose. Choosing your Reunion libraries in Nuget is essentially equivalent to selecting your TPV.
This is great feedback, thank you! What do you like about StoreBroker over the dev ops task? I haven't found good documentation on this subject, so I'm eager to hear your thoughts.
Also great feedback. What is your preference for
I'm a bit confused by this one, I'm fairly aware of how the packaging project works, and this is how I would describe it works. Do you have a repro project or issue to look at?
I wasn't expecting any difference here, but perhaps it's worth calling that out? Is there something you'd like to see? |
This is good feedback. I proposed this because the majority of Windows developers aren't building packaged apps. What do you think is confusing about Sparse packages? |
I don't believe this proposal, nor the associated spec has been well thought out at all - sorry to be blunt but we only get one shot at this and the way things are being proposed is going to lead to more confusion. I've already commented on the spec, along with @DrusTheAxe, indicating that the choice of app model types are completely meaningless and in no way reflect what you're trying to achieve. Reunion should be able developers enabling features, not contorting their app to fit into some set of pre-defined packaging models. For example:
I'm not clear on all the nuances that I've properly overlooked but I do see that the current proposal/spec in no way clears up the confusion that exists regarding desktop v uwp v packaging v sparse packaging etc |
Excellent feedback @nickrandolph. For some of these points, like deciding "my app needs Identity so I can use notifications", the whole purpose of the Project Reunion effort is to make it so that you do NOT need to be MSIX packaged. So, if we do Project Reunion correctly, there should not be any API that you have to be deciding "Hmm, I need to have identity/MSIX". Unpackaged vs packaged apps will be on the same level playing field. Thus, being packaged MSIX vs unpackaged is purely a distribution/security choice (if we as Reunion do our jobs right). Does that help clarify things some? I know we might have not made that story clear, we're working on making this story clearer (an updated README file coming out later this week should help a bit). |
@andrewleader in terms of Identity that's exactly how I see it - basically Identity is something a developer can opt in/out of via a checkbox in project properties (irrespective of how it's implemented). On an implementation level for Identity I was under the impression you'd still need to at least do a sparse package, even if this was opaque to the developer (i.e. the package is built and included as an asset alongside the application, or is dynamically generated at runtime so identity can be registered). I also agree packaged v unpackaged is just a single checkbox. Again an opt in/out for developer to take advantage of the distribution/security model. What I don't understand is the different "app model types" specified in this issue/spec. What do I get from switching between Desktop and Universal packaging? Is this supposed to reflect whether the app runs in the app container or not? If so, this should be a checkbox itself (i.e. first check box is to enable packaging, second checkbox (assuming first is selected) is for the app container). My overall point is this is about enabling features based on what developers want to achieve. |
My experience: The
We hardcode
Sadly it doesn't. If the project isn't executable (exe.csproj in this example), you can't add it as a dependency. Here's a hack @StefanWickDev uses to get around this. (https://stackoverflow.com/questions/48754557/packaging-winforms-application-along-with-native-dll/48772581#48772581) Big pain point for me.
Just brought it up for awareness. I suppose an app can continue to target |
Desktop and UWP shouldn't be separate project types and runtimes. One of the goals of project reunion should be to correctly unify those two application types. Desktop should be a subset of the Universal application type. Universal apps primarily run on the desktop, it's one of the deployment targets. Desktop is (should be) just a special case of the UWP. The continuation of the idea that Desktop and UWP are separate is an unfortunate result of the misconception even within Microsoft of what UWP is and should be. UWP could have only survived and also it's only future in whatever form it takes, is as a universal platform across Windows that supports any workload. Any continuation of UWP as a hobbled platform - with forced overlays, with limited deployment, without support and feature growth is a dead-end. And I know people will hate this idea, because they come from either of two sides of the fence, they either come from the legacy side and refuse to give any oxygen to UWP, it's a mobile platform, it's a containerized and light workload platform. Or they come from the UWP side, it's restricted for a reason, for security reasons or for some other contrived reason and we can't allow it to have any capabilities that break that mould. This idea actually helps break down the idea that these apps are separate, because really they aren't. When I start a UWP app - I'm 100% intending it to be a desktop app - with security, with Xaml, with WinRT. |
"yes, light, restricted" so much so that instead developing a PWA is waaaaaaaaay much more worthy than this. since the birth of "UWP", it has always been either you choose the vast win32 developers aka windows developers or you the lose the OS platform business with "little to no UWP" devs. Let the App Container come to all win32 apps . then "UWP" can RIP forever. thanks. |
@ecovio1 Development for UWP is so similar to development for .Net 5 it's just not even an issue. Are you suggesting that if I brought someone on to my team who had no UWP experience, they couldn't handle working on a UWP-Desktop app? That sounds implausible to me. The work is 97% the same between .Net 5 and UWP. I'd imagine Reunion will lift that to 99% or higher. There's practically no distinction between UWP and .Net 5 devs. I would happily take on a .net core / uwp / .net 5 / framework developer in any such position. The fact that people still think there is such a huge difference, exhibits how confused the situation has been. And moving forward, there is no rule that the UWP security model can't be expended to cover 'win32' needs. The sooner the better. Then we can have a truly universal windows application model. |
@alwu-msft do we have image assets covered in the spec? Like including images in the single project which get bundled into the msix and used via |
@andrewleader Not specifically; how image assets are specified and gathered to be included directly in the app package is not being changed, so I don't think there's a need to bring it into the scope of this proposal. |
They live in the app project just as they do for Universal app projects, and you can set them as |
Awesome. I think that's important information to have in the spec though. Just like understanding how you choose to use MSIX in the project, understanding how you add images is just as important (since that's a new concept for desktop apps, better to not just assume "it'll work" 😊) Plus, there's probably questions like what happens when you drop a new image into the project, if the project is set to MSIX, will it automatically set the Build Action to Content? |
Single-project MSIX has been shipped in 1.0 today! https://docs.microsoft.com/windows/apps/windows-app-sdk/single-project-msix |
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
WindowsPackageType
in VS UIImportant Notes
There should be some default behavior that users can expect. This will be defined as:
WindowsPackageType
defaults toNone
WindowsPackageType
defaults toDesktop
.Open Questions
Is
WindowsPackageType
the right property name? Should the existence of the Package.appxmanifest default into aSparse
app, and then developers just choose their container/package? This would mean there are only two options:Desktop
andUniversal
.The text was updated successfully, but these errors were encountered: