Skip to content

Commit

Permalink
Support .NET 9.0 (#2215)
Browse files Browse the repository at this point in the history
* Point to the .NET 9.0 release candidate

* Tweak versions in the pipeline

* allow prerelease builds

* Find overlapping versions for AnxroidX libraries

* Fix null reference type issue

* Shift to TypedBindings

* Keep disabling IL2092 for NET9_0

* Mark types as Dynamically accessed

* Patch up Analyzer unit tests

* Fix the AvatarView unit tests

* Suppress warning disable IL2026

* Update comments in Camera project

* Update src/CommunityToolkit.Maui.Analyzers.UnitTests/Verifiers/CSharpAnalyzerVerifier`1+Test.cs

Co-authored-by: Brandon Minnick <[email protected]>

* Update src/CommunityToolkit.Maui.Analyzers.UnitTests/Verifiers/CSharpCodeFixVerifier`2+Test.cs

Co-authored-by: Brandon Minnick <[email protected]>

* Include preview builds for benchmarks

* Remove Obsolete code

* Remove pragma now that unsafe code has been removed

* Update ICommunityToolkitBehavior.shared.cs

* Update Expander.shared.cs

* `MainPage` -> `Windows[0].Page`

* use `override CreateWindow(IActivationState)` to initialize AppShell

* Increase to Xcode 16

* Make use of a TypedBinding instance to workaround current limitations

* Remove ifdef

* Enable `NuGetAudit`

* Add WarningsAsErrors for `NuGetAudit`

* Remove Obsolete PopupService method

* Update for .NET 9 RC 2

* Update Android dependencies

* Remove unrequired NuGet Packages

* Fix Vulnerabilities

* Resolve NuGet Dependency Conflicts

* Remove reflection

* Fix `Camera` Android Dependencies

* Refactor return statement

* Fix nullability error

* Update AppShell.xaml

* Increase to RC2

* Use `static`

* Use `private protected` constructor

* Stop automatically assigning Behavior BindingContext

* Remove References to `TrySetBindingContextToAttachedViewBindingContext`

* Update BaseBehaviorTest.cs

* Refactor GravatarImageSource

* Update CommunityToolkit.Maui.Sample.csproj

* Update for CsWinRT1028, CsWinRT1030, XC0045, and XC0103

* Use `partial` for source generators

* Use Syntax Highlighting for code blocks

* Removed duplicate string

* Remove References to Application.Current.MainPage

* Fix typos

* Update samples/CommunityToolkit.Maui.Sample/CommunityToolkit.Maui.Sample.csproj

* Update samples/CommunityToolkit.Maui.Sample/Pages/Views/Expander/ExpanderPageCS.cs

* Fix Find + Replace typo

* Remove unused namespace

* Remove `MainPage`

* Add BindingContext to Behaviors in Sample App

* Increase Android SupportedOSPlatformVersion to 26

* Fix XAML Warnings

* Use `macos-15-arm64`

* Update azure-pipelines.yml

* Use Xcode version `16`

* Revert back to macOS14

* Use BindingMode.OneWay

* Fix PopupService Tests

* Fix AvatarView Tests

* Fix AvatarView Tests

* Fix ParentWindowTests

* Resolve AppTheme Tests

* Add `[RequiresUnreferencedCode]` attribute to `ValidationBehavior`

* Update BehaviorsGalleryPage.cs

* `dotnet format`

* Remove `Obsolete` attributes from `dotnet format`

This reverts commit c762fb2.

* Update `Microsoft.CodeAnalysis.CSharp.Workspaces`

* Update Sample App NuGet Packages to .NET 9

* Remove Duplicate NuGet Packages

* Fix #2109

* Fix CameraView warnings

* Refactor ShowKeyboardAsync

* Refactor Code + Performance Improvements

* `dotnet format`

* Remove unused using directives

* Add `[EditorBrowsable(EditorBrowsableState.Never)]`

* Use `BindingBase.Create`

* Update Options.cs

* Renaming and changing ValidationFlags.ValidateOnFocus and ValidateOnUnfocus to ValidateOnUnfocusED as the naming makes more sense. This was from the MCT november standup...

* Fix compiled bindings For MediaElement

* Fix Windows crash on exiting Page or Application when using Media Element

* Remove trace log added by accident

* Fix `MultiValidationBehavior` compiled bindings

* Fix `MultiConverterPage` Compiled Bindings

* Remove `x:DataType` from several lines

* Add using to enable support for logging

* Fix `ColorsConverterPage` compiled bindings. This casts the `x:DataType` to `x:Reference` type.

* Set `x:DataType` in `AppShell.xaml` to support compiled bindings

* Update `LazyViewPage` to add support for compiled bindings

We can set parent with `x:DataType` to cast on `Source` through inheritence.

* Update `EmailValidationBehaviorPage` to support Compiled bindings

* Update params collections

* Update Xcode logic

* Update azure-pipelines.yml

* Update azure-pipelines.yml

* Update azure-pipelines.yml

* Increase to macOS-15

* Add SourceLink

* Update CommunityToolkit.Maui.Sample.csproj

* Update PopupServiceTests.cs

* Resolve Failing DrawingView Unit Tests

* Use Partial Properties

* Support `CarouselViewHandler2` + `CollectionViewHandler2` for MediaElement

* Update comment text

* Update for .NET 9 GA

* Update samples/CommunityToolkit.Maui.Sample/CommunityToolkit.Maui.Sample.csproj

* Add `x:DataType` for Compiled Bindings

* Update NuGet Packages

* Remove reference

* Update CommunityToolkit.Maui.Sample.csproj

* Sort alphabetically

* Set Behavior BindingContext

* Enable IServiceProvider

* Fix compareconverter demo

* Fix Crash

* Fix Behavior Binding

* Add Behavior BindingContext

* Add behavior BindingContext

* Fix DrawingView sample

* Use Enum.IsDefined<T>

* Fix Expander Binding

* Update Maps for async/await + Trimming

* Catch Element Not Found Exception

* Modify CompareConverter signature to match IsInRangeConverter

* Update Directory.Build.props

* run `dotnet workload update` following `dotnet workload install maui`

* Update azure-pipelines.yml

* Revert "Update azure-pipelines.yml"

This reverts commit c240aea.

* Use Primary Constructor, Update Formatting

* Disable warnings on compiler-generated code

* Prevent Usage with Microsoft.Maui.Controls v10.0.0+

* Organize Build props

* Add `[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]`

* Update NuGet Packages

* Add `//lang=csharp` to raw string literals

* Implement `TheoryData`

* Use `field` keyword

* Add Xunit Usage Analyzers

* Add Xunit Assertion Analyzers

* Add Xunit Extensibility Analyzers

* Resolve Trimming Errors

* Bump Xcode to 16.1

* Update NuGet Packages

* Add removed rules

* Bump Windows-specific NuGet Packages

* Add `FluentAssertions.Analyzers`

* Bump TOOLKIT_NET_VERSION to `9.0.101`

* Update NuGet Packages

* Fix typo

* Update Directory.Build.props

* Opt-out of using managed-static for MacCatalyst

* Update `xunit.runner.visualstudio`

* Remove duplicate paranthesis

* Remove AutoFixture

* Update to `xunit.v3`

* Increase minimum required .NET SDK Version

* Fix Snackbar in Modal Page on Android

* Fix Snackbar alignment on iOS

* Fix bindings

* Improve Android Build Times

* Fix typo

* Fix crash on iOS due to `null`

* Use Partial Properties

* Fix Android NavigationBar

* `dotnet format`

---------

Co-authored-by: Shaun Lawrence <[email protected]>
Co-authored-by: Brandon Minnick <[email protected]>
Co-authored-by: Gerald Versluis <[email protected]>
Co-authored-by: CliffAgius <[email protected]>
Co-authored-by: James Crutchley <[email protected]>
  • Loading branch information
6 people authored Dec 18, 2024
1 parent 40b3b17 commit 725260b
Show file tree
Hide file tree
Showing 463 changed files with 5,889 additions and 4,124 deletions.
11 changes: 10 additions & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -142,4 +142,13 @@ dotnet_diagnostic.CA2208.severity = error
dotnet_diagnostic.CA1834.severity = error

# IDE0220: Add explicit cast
dotnet_diagnostic.IDE0220.severity = error
dotnet_diagnostic.IDE0220.severity = error

# Warning CA2264 : Calling 'ArgumentNullException.ThrowIfNull' and passing a non-nullable value is a no-op
dotnet_diagnostic.CA2264.severity = error

# MVMTK0042: The field [ObservableProperty] can be converted to a partial property
dotnet_diagnostic.MVMTK0042.severity = error

# XC0045: Binding Property not found
dotnet_diagnostic.XC0045.severity = error
194 changes: 158 additions & 36 deletions Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,17 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<Project>
<PropertyGroup>
<NetVersion>net8.0</NetVersion>
<MauiPackageVersion>8.0.71</MauiPackageVersion>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<NoWarn>NETSDK1023</NoWarn>
<ProduceReferenceAssembly>true</ProduceReferenceAssembly>
<SkipValidateMauiImplicitPackageReferences>true</SkipValidateMauiImplicitPackageReferences>
<GenerateErrorForMissingTargetingPacks>false</GenerateErrorForMissingTargetingPacks>
<NetVersion>net9.0</NetVersion>
<LangVersion>preview</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
<ProduceReferenceAssembly>true</ProduceReferenceAssembly>
<AccelerateBuildsInVisualStudio>true</AccelerateBuildsInVisualStudio>
<GenerateErrorForMissingTargetingPacks>false</GenerateErrorForMissingTargetingPacks>

<!-- Prevent NuGet Package Vulnerabilities -->
<NuGetAudit>enable</NuGetAudit>
<NuGetAuditMode>all</NuGetAuditMode>

<!-- MAUI Specific -->
<MauiPackageVersion>9.0.21</MauiPackageVersion>
<NextMauiPackageVersion>10.0.0</NextMauiPackageVersion>
<MauiStrictXamlCompilation>true</MauiStrictXamlCompilation>
<SkipValidateMauiImplicitPackageReferences>true</SkipValidateMauiImplicitPackageReferences>
<MauiEnableXamlCBindingWithSourceCompilation>true</MauiEnableXamlCBindingWithSourceCompilation>

<!-- https://learn.microsoft.com/dotnet/core/deploying/native-aot/?tabs=net8plus%2Cwindows -->
<StripSymbols>false</StripSymbols>
Expand Down Expand Up @@ -39,40 +48,153 @@
CS1712: Type parameter has no matching typeparam tag in the XML comment
CS1723: XML comment has cref attribute that refers to a type parameter
CS1734: XML comment has a paramref tag, but there is no parameter by that name
xUnit1012: Null should not be used for type parameter
xUnit2021: Assert.ThrowsAsync is async. The resulting task should be awaited
IL2***: Trim Warnings
IL3***: AOT Warnings
MVMTK0042: The field [ObservableProperty] can be converted to a partial property
CsWinRT1028: Class implements WinRT interfaces but isn't marked partial
CsWinRT1030: Class implements WinRT interfaces that require unsafe code
NU1900 Error communicating with package source, while getting vulnerability information.
NU1901 Package with low severity detected
NU1902 Package with moderate severity detected
NU1903 Package with high severity detected
NU1904 Package with critical severity detected
NU1905 An audit source does not provide a vulnerability database
xUnit1000: Test classes must be public
xUnit1001: Fact methods cannot have parameters
xUnit1002: Test methods cannot have multiple Fact or Theory attributes
xUnit1003: Theory methods must have test data
xUnit1004: Test methods should not be skipped
xUnit1005: Fact methods should not have test data
xUnit1006: Theory methods should have parameters
xUnit1007: ClassData must point at a valid class
xUnit1008: Test data attribute should only be used on a Theory
xUnit1009: InlineData values must match the number of method parameters
xUnit1010: The value is not convertible to the method parameter type
xUnit1011: There is no matching method parameter
xUnit1012: Null should not be used for value type parameters
xUnit1013: Public method should be marked as test
xUnit1014: MemberData should use nameof operator for member name
xUnit1015: MemberData must reference an existing member
xUnit1016: MemberData must reference a public member
xUnit1017: MemberData must reference a static member
xUnit1018: MemberData must reference a valid member kind
xUnit1019: MemberData must reference a member providing a valid data type
xUnit1020: MemberData must reference a property with a getter
xUnit1021: MemberData should not have parameters if the referenced member is not a method
xUnit1022: Theory methods cannot have a parameter array
xUnit1023: Theory methods cannot have default parameter values
xUnit1024: Test methods cannot have overloads
xUnit1025: InlineData should be unique within the Theory it belongs to
xUnit1026: Theory methods should use all of their parameters
xUnit1027: Collection definition classes must be public
xUnit1028: Test method must have valid return type
xUnit1029: Local functions cannot be test functions
xUnit1030: Do not call ConfigureAwait in test method
xUnit1031: Do not use blocking task operations in test method
xUnit1032: Test classes cannot be nested within a generic class
xUnit1033: Test classes decorated with 'Xunit.IClassFixture' or 'Xunit.ICollectionFixture' should add a constructor argument of type TFixture
xUnit1034: Null should only be used for nullable parameters
xUnit1035: The value is not convertible to the method parameter type
xUnit1036: There is no matching method parameter
xUnit1037: There are fewer theory data type arguments than required by the parameters of the test method
xUnit1038: There are more theory data type arguments than allowed by the parameters of the test method
xUnit1039: The type argument to theory data is not compatible with the type of the corresponding test method parameter
xUnit1040: The type argument to theory data is nullable, while the type of the corresponding test method parameter is not
xUnit1041: Fixture arguments to test classes must have fixture sources
xUnit1042: The member referenced by the MemberData attribute returns untyped data rows
xUnit1043: Constructors on classes derived from FactAttribute must be public when used on test methods
xUnit1048: Avoid using 'async void' for test methods as it is deprecated in xUnit.net v3
xUnit1049: Do not use 'async void' for test methods as it is no longer supported
xUnit1050: The class referenced by the ClassData attribute returns untyped data rows
xUnit1051: Calls to methods which accept CancellationToken should use TestContext.Current.CancellationToken
xUnit2000: Constants and literals should be the expected argument
xUnit2001: Do not use invalid equality check
xUnit2002: Do not use null check on value type
xUnit2003: Do not use equality check to test for null value
xUnit2004: Do not use equality check to test for boolean conditions
xUnit2005: Do not use identity check on value type
xUnit2006: Do not use invalid string equality check
xUnit2007: Do not use typeof expression to check the type
xUnit2008: Do not use boolean check to match on regular expressions
xUnit2009: Do not use boolean check to check for substrings
xUnit2010: Do not use boolean check to check for string equality
xUnit2011: Do not use empty collection check
xUnit2012: Do not use Enumerable.Any() to check if a value exists in a collection
xUnit2013: Do not use equality check to check for collection size.
xUnit2014: Do not use throws check to check for asynchronously thrown exception
xUnit2015: Do not use typeof expression to check the exception type
xUnit2016: Keep precision in the allowed range when asserting equality of doubles or decimals.
xUnit2017: Do not use Contains() to check if a value exists in a collection
xUnit2018: Do not compare an object's exact type to an abstract class or interface
xUnit2019: Do not use obsolete throws check to check for asynchronously thrown exception
xUnit2020: Do not use always-failing boolean assertion to fail a test
xUnit2021: Async assertions should be awaited
xUnit2022: Boolean assertions should not be negated
xUnit2023: Do not use collection methods for single-item collections
xUnit2024: Do not use boolean asserts for simple equality tests
xUnit2025: The boolean assertion statement can be simplified
xUnit2026: Comparison of sets must be done with IEqualityComparer
xUnit2027: Comparison of sets to linear containers have undefined results
xUnit2028: Do not use Assert.Empty or Assert.NotEmpty with problematic types
xUnit2029: Do not use Assert.Empty to check if a value does not exist in a collection
xUnit2030: Do not use Assert.NotEmpty to check if a value exists in a collection
xUnit2031: Do not use Where clause with Assert.Single
xUnit2032: Type assertions based on 'assignable from' are confusingly named
xUnit3000: Classes which cross AppDomain boundaries must derive directly or indirectly from LongLivedMarshalByRefObject
xUnit3001: Classes that are marked as serializable (or created by the test framework at runtime) must have a public parameterless constructor
xUnit3002: Classes which are JSON serializable should not be tested for their concrete type
XC0045: Binding: Property not found
XC0103: Consider attributing the markup extension with [RequireService] or [AcceptEmptyServiceProvider] if it doesn't require any
IL2***: Trim Warnings
IL3***: AOT Warnings
RS2007: Analyzer release file 'AnalyzerReleases.Shipped.md' has a missing or invalid release header-->
<WarningsAsErrors>nullable,
CS0419,CS1570,CS1571,CS1572,CS1573,CS1574,CS1580,CS1581,CS1584,CS1587,CS1589,CS1590,CS1591,CS1592,CS1598,CS1658,CS1710,CS1711,CS1712,CS1723,CS1734,
xUnit1012,xUnit2021,
IL2001,IL2002,IL2003,IL2004,IL2005,IL2006,IL2007,IL2008,IL2009,
IL2010,IL2011,IL2012,IL2013,IL2014,IL2015,IL2016,IL2017,IL2018,IL2019,
IL2020,IL2021,IL2022,IL2023,IL2024,IL2025,IL2026,IL2027,IL2028,IL2029,
IL2030,IL2031,IL2032,IL2033,IL2034,IL2035,IL2036,IL2037,IL2038,IL2039,
IL2040,IL2041,IL2042,IL2043,IL2044,IL2045,IL2046,IL2047,IL2048,IL2049,
IL2050,IL2051,IL2052,IL2053,IL2054,IL2055,IL2056,IL2057,IL2058,IL2059,
IL2060,IL2061,IL2062,IL2063,IL2064,IL2065,IL2066,IL2067,IL2068,IL2069,
IL2070,IL2071,IL2072,IL2073,IL2074,IL2075,IL2076,IL2077,IL2078,IL2079,
IL2080,IL2081,IL2082,IL2083,IL2084,IL2085,IL2086,IL2087,IL2088,IL2089,
IL2090,IL2091,IL2092,IL2093,IL2094,IL2095,IL2096,IL2097,IL2098,IL2099,
IL2100,IL2101,IL2102,IL2103,IL2104,IL2105,IL2106,IL2107,IL2108,IL2109,
IL2110,IL2111,IL2112,IL2113,IL2114,IL2115,IL2116,IL2117,IL2118,IL2119,
IL2120,IL2121,IL2122,
IL3050,IL3051,IL3052,IL3053,IL3054,IL3055,IL3056,
RS2007
</WarningsAsErrors>
<WarningsAsErrors>
nullable,
CS0419,CS1570,CS1571,CS1572,CS1573,CS1574,CS1580,CS1581,CS1584,CS1587,CS1589,CS1590,CS1591,CS1592,CS1598,CS1658,CS1710,CS1711,CS1712,CS1723,CS1734,
CsWinRT1028,CsWinRT1030,
MVMTK0042,
NU1900,NU1901,NU1902,NU1903,NU1904,NU1905,
xUnit1000,xUnit1001,xUnit1002,xUnit1003,xUnit1004,xUnit1005,xUnit1006,xUnit1007,xUnit1008,xUnit1009,xUnit1010,xUnit1011,xUnit1012,xUnit1013,xUnit1014,xUnit1015,xUnit1016,xUnit1017,xUnit1018,xUnit1019,xUnit1020,xUnit1021,xUnit1022,xUnit1023,xUnit1024,xUnit1025,xUnit1026,xUnit1027,xUnit1028,xUnit1029,xUnit1030,xUnit1031,xUnit1032,xUnit1033,xUnit1034,xUnit1035,xUnit1036,xUnit1037,xUnit1038,xUnit1039,xUnit1040,xUnit1041,xUnit1042,xUnit1043,xUnit1048,xUnit1049,xUnit1050,xUnit1051,
xUnit2000,xUnit2001,xUnit2002,xUnit2003,xUnit2004,xUnit2005,xUnit2006,xUnit2007,xUnit2008,xUnit2009,xUnit2010,xUnit2011,xUnit2012,xUnit2013,xUnit2014,xUnit2015,xUnit2016,xUnit2017,xUnit2018,xUnit2019,xUnit2020,xUnit2021,xUnit2022,xUnit2023,xUnit2024,xUnit2025,xUnit2026,xUnit2027,xUnit2028,xUnit2029,xUnit2030,xUnit2031,xUnit2032,
xUnit3000,xUnit3001,xUnit3002,
XC0045,XC0103,
IL2001,IL2002,IL2003,IL2004,IL2005,IL2006,IL2007,IL2008,IL2009,
IL2010,IL2011,IL2012,IL2013,IL2014,IL2015,IL2016,IL2017,IL2018,IL2019,
IL2020,IL2021,IL2022,IL2023,IL2024,IL2025,IL2026,IL2027,IL2028,IL2029,
IL2030,IL2031,IL2032,IL2033,IL2034,IL2035,IL2036,IL2037,IL2038,IL2039,
IL2040,IL2041,IL2042,IL2043,IL2044,IL2045,IL2046,IL2047,IL2048,IL2049,
IL2050,IL2051,IL2052,IL2053,IL2054,IL2055,IL2056,IL2057,IL2058,IL2059,
IL2060,IL2061,IL2062,IL2063,IL2064,IL2065,IL2066,IL2067,IL2068,IL2069,
IL2070,IL2071,IL2072,IL2073,IL2074,IL2075,IL2076,IL2077,IL2078,IL2079,
IL2080,IL2081,IL2082,IL2083,IL2084,IL2085,IL2086,IL2087,IL2088,IL2089,
IL2090,IL2091,IL2092,IL2093,IL2094,IL2095,IL2096,IL2097,IL2098,IL2099,
IL2100,IL2101,IL2102,IL2103,IL2104,IL2105,IL2106,IL2107,IL2108,IL2109,
IL2110,IL2111,IL2112,IL2113,IL2114,IL2115,IL2116,IL2117,IL2118,IL2119,
IL2120,IL2121,IL2122,
IL3050,IL3051,IL3052,IL3053,IL3054,IL3055,IL3056,
RS2007
</WarningsAsErrors>
</PropertyGroup>

<!-- Required for NuGet Source Link -->
<PropertyGroup Condition="'$(TF_BUILD)' == 'true' OR '$(GITHUB_ACTIONS)' == 'true'">
<!-- Ensure deterministic build when using Azure Pipelines or GitHub Actions-->
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>

<!-- Publish the repository URL in the built .nupkg (in the NuSpec <Repository> element) -->
<PublishRepositoryUrl>true</PublishRepositoryUrl>

<!-- Embed source files that are not tracked by the source control manager in the PDB -->
<EmbedUntrackedSources>true</EmbedUntrackedSources>

<!-- Embed symbols containing Source Link in the main file (exe/dll) -->
<DebugType>embedded</DebugType>
</PropertyGroup>

<ItemGroup>
<InternalsVisibleTo Include="CommunityToolkit.Maui.UnitTests" />
<InternalsVisibleTo Include="CommunityToolkit.Maui.UnitTests"/>
<InternalsVisibleTo Include="CommunityToolkit.Maui.Analyzers.UnitTests"/>
</ItemGroup>
<PropertyGroup Condition="'$(TF_BUILD)' == 'true' and $([MSBuild]::IsOSPlatform('windows')) == 'true'">

<PropertyGroup Condition="('$(TF_BUILD)' == 'true' OR '$(GITHUB_ACTIONS)' == 'true') and $([MSBuild]::IsOSPlatform('windows')) == 'true'">
<IncludeTizenTargetFrameworks>true</IncludeTizenTargetFrameworks>
</PropertyGroup>
</Project>
Loading

0 comments on commit 725260b

Please sign in to comment.