Skip to content

Commit 4c13ad3

Browse files
Add .NET 10 Support (#251)
This PR updates `AsyncAwaitBestPractices` to .NET 10
1 parent d3ea559 commit 4c13ad3

File tree

44 files changed

+1048
-283
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1048
-283
lines changed

AsyncAwaitBestPractices.sln

Lines changed: 0 additions & 99 deletions
This file was deleted.

AsyncAwaitBestPractices.slnx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<Solution>
2+
<Configurations>
3+
<Platform Name="Any CPU" />
4+
<Platform Name="iPhone" />
5+
<Platform Name="iPhoneSimulator" />
6+
</Configurations>
7+
<Folder Name="/Sample/">
8+
<Project Path="sample/HackerNews.csproj" />
9+
</Folder>
10+
<Folder Name="/Solution Items/">
11+
<File Path=".editorconfig" />
12+
<File Path="Directory.Build.props" />
13+
<File Path="Directory.Build.targets" />
14+
<File Path="global.json" />
15+
</Folder>
16+
<Folder Name="/Tests/">
17+
<Project Path="src/AsyncAwaitBestPractices.UnitTests/AsyncAwaitBestPractices.UnitTests.csproj" />
18+
</Folder>
19+
<Project Path="src/AsyncAwaitBestPractices.MVVM/AsyncAwaitBestPractices.MVVM.csproj" />
20+
<Project Path="src/AsyncAwaitBestPractices/AsyncAwaitBestPractices.csproj" />
21+
</Solution>

Directory.Build.props

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,21 @@
22
<Project>
33
<PropertyGroup>
44
<Nullable>enable</Nullable>
5-
<NuGetVersion>9.0.0</NuGetVersion>
5+
<NuGetVersion>10.0.0</NuGetVersion>
66
<LangVersion>preview</LangVersion>
77
<Deterministic>true</Deterministic>
8-
<LatestSupportedTFM>net9.0</LatestSupportedTFM>
8+
<LatestSupportedTFM>net10.0</LatestSupportedTFM>
99
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
1010
<ProduceReferenceAssembly>true</ProduceReferenceAssembly>
1111
<AccelerateBuildsInVisualStudio>true</AccelerateBuildsInVisualStudio>
1212
<GenerateErrorForMissingTargetingPacks>false</GenerateErrorForMissingTargetingPacks>
1313

1414
<!-- MAUI Specific -->
15-
<MauiPackageVersion>9.0.100</MauiPackageVersion>
15+
<MauiPackageVersion>10.0.0</MauiPackageVersion>
1616
<MauiStrictXamlCompilation>true</MauiStrictXamlCompilation>
1717
<SkipValidateMauiImplicitPackageReferences>true</SkipValidateMauiImplicitPackageReferences>
1818
<MauiEnableXamlCBindingWithSourceCompilation>true</MauiEnableXamlCBindingWithSourceCompilation>
19-
19+
2020
<!-- Prevent NuGet Pacakge Vulnerabilities -->
2121
<NuGetAudit>enable</NuGetAudit>
2222
<NuGetAuditMode>all</NuGetAuditMode>

azure-pipelines.yml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ variables:
22
DOTNET_CLI_TELEMETRY_OPTOUT: true
33
CurrentSemanticVersionBase: '99.0.0'
44
PreviewNumber: $[counter(variables['CurrentSemanticVersionBase'], 1001)]
5-
NET_VERSION: '9.0.x'
5+
NET_VERSION: '10.0.x'
66
CurrentSemanticVersion: '$(CurrentSemanticVersionBase)-preview$(PreviewNumber)'
77
NugetPackageVersion: '$(CurrentSemanticVersion)'
8-
PathToSolution: 'AsyncAwaitBestPractices.sln'
8+
PathToSolution: 'AsyncAwaitBestPractices.slnx'
99
PathToSampleAppCsproj: 'sample/HackerNews.csproj'
1010
PathToUnitTestsCsproj: 'src/AsyncAwaitBestPractices.UnitTests/AsyncAwaitBestPractices.UnitTests.csproj'
1111
PathToAsyncAwaitBestPracticesCsproj: 'src/AsyncAwaitBestPractices/AsyncAwaitBestPractices.csproj'
1212
PathToAsyncAwaitBestPracticesMVVMCsproj: 'src/AsyncAwaitBestPractices.MVVM/AsyncAwaitBestPractices.MVVM.csproj'
13-
Xcode_Version: '26.0.1'
13+
Xcode_Version: '26.1'
1414

1515
trigger:
1616
branches:
@@ -142,6 +142,12 @@ jobs:
142142

143143
- task: UseDotNet@2
144144
displayName: 'Use .Net SDK 9.0.x'
145+
inputs:
146+
version: '9.0.x'
147+
packageType: 'sdk'
148+
149+
- task: UseDotNet@2
150+
displayName: 'Use Latest .Net SDK, $(NET_VERSION)'
145151
inputs:
146152
version: '$(NET_VERSION)'
147153
packageType: 'sdk'

global.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"sdk": {
3-
"version": "9.0.304",
3+
"version": "10.0.100",
44
"rollForward": "latestFeature",
55
"allowPrerelease": false
66
}

sample/HackerNews.csproj

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
<TargetPlatformMinVersion Condition="$(TargetFramework.Contains('-windows'))">10.0.19041.0</TargetPlatformMinVersion>
2525

2626
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
27-
<CodesignKey>iPhone Developer</CodesignKey>
2827
</PropertyGroup>
2928

3029
<ItemGroup>
@@ -41,11 +40,11 @@
4140
</ItemGroup>
4241

4342
<ItemGroup>
44-
<PackageReference Include="Microsoft.Extensions.Http.Resilience" Version="9.8.0" />
43+
<PackageReference Include="Microsoft.Extensions.Http.Resilience" Version="10.0.0" />
4544
<PackageReference Include="Refit.HttpClientFactory" Version="8.0.0" />
4645
<PackageReference Include="CommunityToolkit.Maui.Markup" Version="6.0.1" />
4746
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
48-
<PackageReference Include="CommunityToolkit.Maui" Version="12.2.0" />
47+
<PackageReference Include="CommunityToolkit.Maui" Version="12.3.0" />
4948
<PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiPackageVersion)" />
5049
</ItemGroup>
5150

@@ -60,5 +59,9 @@
6059
<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)'))=='ios'">
6160
<RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
6261
</PropertyGroup>
62+
63+
<PropertyGroup Condition="$(Configuration) == 'Release'">
64+
<CodesignKey>Apple Development</CodesignKey>
65+
</PropertyGroup>
6366

6467
</Project>

sample/MauiProgram.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public static MauiApp CreateMauiApp()
1616
.UseMauiCommunityToolkit()
1717
.UseMauiCommunityToolkitMarkup();
1818

19-
builder.ConfigureMauiHandlers(handlers =>
19+
builder.ConfigureMauiHandlers(static handlers =>
2020
{
2121
#if IOS || MACCATALYST
2222
handlers.AddHandler<Shell, ShellWithLargeTitles>();
@@ -32,8 +32,8 @@ public static MauiApp CreateMauiApp()
3232
builder.Services.AddSingleton<HackerNewsAPIService>();
3333

3434
builder.Services.AddRefitClient<IHackerNewsAPI>()
35-
.ConfigureHttpClient(client => client.BaseAddress = new Uri("https://hacker-news.firebaseio.com/v0"))
36-
.AddStandardResilienceHandler(options => options.Retry = new MobileHttpRetryStrategyOptions());
35+
.ConfigureHttpClient(static client => client.BaseAddress = new Uri("https://hacker-news.firebaseio.com/v0"))
36+
.AddStandardResilienceHandler(static options => options.Retry = new MobileHttpRetryStrategyOptions());
3737

3838
// Pages + View Models
3939
builder.Services.AddTransientWithShellRoute<NewsPage, NewsViewModel>($"//{nameof(NewsPage)}");

sample/Pages/NewsPage.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,11 @@ async void HandleSelectionChanged(object? sender, SelectionChangedEventArgs e)
7070
}
7171
else
7272
{
73-
await DisplayAlert("Invalid Article", "ASK HN articles have no url", "OK");
73+
await DisplayAlertAsync("Invalid Article", "ASK HN articles have no url", "OK");
7474
}
7575
}
7676
}
7777

7878
void HandlePullToRefreshFailed(object? sender, string message) =>
79-
_dispatcher.DispatchAsync(() => DisplayAlert("Refresh Failed", message, "OK"));
79+
_dispatcher.DispatchAsync(() => DisplayAlertAsync("Refresh Failed", message, "OK"));
8080
}

sample/ViewModels/NewsViewModel_GoodAsyncAwaitPractices.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ async IAsyncEnumerable<StoryModel> GetTopStories(int storyCount, [EnumeratorCanc
5252

5353
var getTopStoryTaskList = topStoryIds.Select(id => _hackerNewsAPIService.GetStory(id, token)).ToList();
5454

55-
await foreach (var topStoryTask in Task.WhenEach(getTopStoryTaskList).WithCancellation(token).ConfigureAwait(false))
55+
await foreach (var topStoryTask in getTopStoryTaskList.ToAsyncEnumerable().WithCancellation(token).ConfigureAwait(false))
5656
{
5757
yield return await topStoryTask.ConfigureAwait(false);
5858

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Runtime.CompilerServices;
4+
using System.Text;
5+
6+
[assembly: InternalsVisibleTo("AsyncAwaitBestPractices.UnitTests, PublicKey=002400000480000094000000060200000024000052534131000400000100010021b4f87ef08bfb03cf46387f9423bcd97c614f8789a988a49830a061995924669464a191aca4d51bf13ab452d606a850efbffec0218a83b7206bf606302843fec82c39e0267e0606e1a2694154629aa7b58cd4a88916ea6aad9d6b3d42cd91bf457b1487fad857e8abe77990dd7c9fee769356e1671ba83b56dcced37b8b41b5")]
7+
namespace AsyncAwaitBestPractices;

0 commit comments

Comments
 (0)