-
Notifications
You must be signed in to change notification settings - Fork 320
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
v1.6-preview breaking changes: #4645
Comments
For the change between packageFamilyName to packageFullName, there is a pretty big and functional difference between a package's family name and full name. |
@DarranRowe So are you saying this method is not only changing parameter name, but also changing what parameter we're meant to send in? If so that's even worse. |
@dotMorten |
I'm not following. This is Preview (not experimental), and is a comparison to v1.5 where it was |
My mistake, I completely forgot that this was in 1.5 and thought that this was a comparison to 1.6 experimental. |
In .NET we don't consider changing the name for a parameter as source breaking change (while actually it is, but named parameters are too subtle to account for). Also this change happens in the winmd so that C++ users won't be affected at all. |
@hez2010 |
@hez2010 That's not true. It's a breaking change from the .NET Runtime team's perspective:
I sure hope not. When did this happen last? I could maybe, and that's a BIG maybe, see the parameter name being changed in a major release, but not in a minor one. |
There is also a doubly problematic issue here. If you look into the documentation for COM interfaces, it states: COM interfaces are immutable. You cannot define a new version of an old interface and give it the same identifier. Adding or removing methods of an interface or changing semantics creates a new interface, not a new version of an old interface. Therefore, a new interface cannot conflict with an old interface. However, objects can support multiple interfaces simultaneously and can expose interfaces that are successive revisions of an interface, with different identifiers. Thus, each interface is a separate contract, and systemwide objects need not be concerned about whether the version of the interface they are calling is the one they expect. The interface ID (IID) defines the interface contract explicitly and uniquely. I emphasised the important points here. This is relevant because under the surface, these are WinRT components which are, in turn, COM components. Both 1.5 and 1.6 preview 1 use the same IID for the main interface:
You can see this in the metadata if you use ildisasm, but I used winmdidl to generate idl files from the .winmd files. But the important thing here is, if the parameter semantics changed along with the parameter name, then this is a pretty bad violation of the interface rules. As an interesting side note, Win2D did this too. |
It looks like potential parameter behavior change for
In short, these always threw a not-implemented exception in 1.5. @DrusTheAxe for any further comments on these functions (added as part of #4453). Internal bugs for the two API breaking changes: ContentIsland.Create and PackageDeploymentManager.IsPackageRegistrationPending* |
same for the CommunityToolkit.WinUI.Controls.SettingsControls all ui controls are broken in app sdk 1.6 preview 1 only experimantel works |
Confirmed fixed: https://omds.xaml.dev/WinAppSDK_v1.5_v1.6-p2.html |
Describe the bug
I noticed a few breaking changes in v1.6-p1:
I get changing the parameter names to use proper casing or better convey some concept, but in this case the changes here are so subtle and non-consequential that I don't think it's worth breaking people's code.
Example of code that no longer compiles in 1.6:
NuGet package version
Windows App SDK 1.6 Preview 1: 1.6.240807006-preview1
The text was updated successfully, but these errors were encountered: