From d199d93ae42120d36c5d856f0664efb61b7fb1a7 Mon Sep 17 00:00:00 2001 From: JT Date: Wed, 23 Oct 2019 10:50:12 +0800 Subject: [PATCH] meta: Fix .NET Core 3.0 compatibility + Drop NS1.3 (#1382) * Update all dependencies and deal with warning/errors * Add updated AsyncEnumerable implementation * Fix broken target * Cleanup * Remove obsolete message * typo * Update azure pipelines * Update samples to .NET Core 3.0 * Pull out test change * Install the .net core 3 SDK on the ubuntu image for the time being * Target net core 3 for the unit tests because pipelines --- azure-pipelines.yml | 9 ++++-- .../01_basic_ping_bot.csproj | 2 +- .../02_commands_framework.csproj | 4 +-- .../03_sharded_client.csproj | 6 +++- .../Discord.Net.Analyzers.csproj | 6 ++-- .../GuildAccessAnalyzer.cs | 4 ++- .../Discord.Net.Commands.csproj | 11 ++----- .../Readers/UserTypeReader.cs | 2 +- src/Discord.Net.Core/Discord.Net.Core.csproj | 8 ++--- .../Extensions/AsyncEnumerableExtensions.cs | 2 +- .../Utils/Paging/PagedEnumerator.cs | 16 ++++++---- .../Discord.Net.Examples.csproj | 4 +-- .../Discord.Net.Providers.WS4Net.csproj | 4 +-- .../WS4NetProvider.cs | 2 +- src/Discord.Net.Rest/Discord.Net.Rest.csproj | 9 ++---- .../Discord.Net.WebSocket.csproj | 7 ++--- .../Discord.Net.Webhook.csproj | 2 +- src/Discord.Net/Discord.Net.nuspec | 8 ++--- .../Discord.Net.Analyzers.Tests.csproj | 13 ++++---- .../Extensions/AppDomainPolyfill.cs | 30 ------------------- .../Discord.Net.Tests.Integration.csproj | 11 ++++--- .../Discord.Net.Tests.Unit.csproj | 13 ++++---- .../MockedEntities/MockedGroupChannel.cs | 1 - 23 files changed, 79 insertions(+), 95 deletions(-) delete mode 100644 test/Discord.Net.Analyzers.Tests/Extensions/AppDomainPolyfill.cs diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 387ceda6a..5a1d48082 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -16,18 +16,23 @@ jobs: pool: vmImage: 'ubuntu-16.04' steps: + - task: UseDotNet@2 + displayName: 'Use .NET Core sdk' + inputs: + packageType: 'sdk' + version: '3.x' - template: azure/build.yml - job: Windows_build pool: - vmImage: 'vs2017-win2016' + vmImage: 'windows-2019' condition: ne(variables['Build.SourceBranch'], 'refs/heads/dev') steps: - template: azure/build.yml - job: Windows_deploy pool: - vmImage: 'vs2017-win2016' + vmImage: 'windows-2019' condition: | and ( succeeded(), diff --git a/samples/01_basic_ping_bot/01_basic_ping_bot.csproj b/samples/01_basic_ping_bot/01_basic_ping_bot.csproj index 5484e3d55..4b4e35e3f 100644 --- a/samples/01_basic_ping_bot/01_basic_ping_bot.csproj +++ b/samples/01_basic_ping_bot/01_basic_ping_bot.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp2.0 + netcoreapp3.0 diff --git a/samples/02_commands_framework/02_commands_framework.csproj b/samples/02_commands_framework/02_commands_framework.csproj index f479ee0b0..84b30aa99 100644 --- a/samples/02_commands_framework/02_commands_framework.csproj +++ b/samples/02_commands_framework/02_commands_framework.csproj @@ -2,11 +2,11 @@ Exe - netcoreapp2.0 + netcoreapp3.0 - + diff --git a/samples/03_sharded_client/03_sharded_client.csproj b/samples/03_sharded_client/03_sharded_client.csproj index 5d76961cd..a6599c117 100644 --- a/samples/03_sharded_client/03_sharded_client.csproj +++ b/samples/03_sharded_client/03_sharded_client.csproj @@ -2,10 +2,14 @@ Exe - netcoreapp2.1 + netcoreapp3.0 _03_sharded_client + + + + diff --git a/src/Discord.Net.Analyzers/Discord.Net.Analyzers.csproj b/src/Discord.Net.Analyzers/Discord.Net.Analyzers.csproj index 5da3d506d..1b2ee45bf 100644 --- a/src/Discord.Net.Analyzers/Discord.Net.Analyzers.csproj +++ b/src/Discord.Net.Analyzers/Discord.Net.Analyzers.csproj @@ -1,13 +1,13 @@ - + Discord.Net.Analyzers Discord.Analyzers A Discord.Net extension adding support for design-time analysis of the API usage. - netstandard1.3 + netstandard2.0;netstandard2.1 - + diff --git a/src/Discord.Net.Analyzers/GuildAccessAnalyzer.cs b/src/Discord.Net.Analyzers/GuildAccessAnalyzer.cs index 0760d019f..38d3f39d4 100644 --- a/src/Discord.Net.Analyzers/GuildAccessAnalyzer.cs +++ b/src/Discord.Net.Analyzers/GuildAccessAnalyzer.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Immutable; using System.Linq; using Microsoft.CodeAnalysis; @@ -24,6 +24,8 @@ namespace Discord.Analyzers public override void Initialize(AnalysisContext context) { + context.EnableConcurrentExecution(); + context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics); context.RegisterSyntaxNodeAction(AnalyzeMemberAccess, SyntaxKind.SimpleMemberAccessExpression); } diff --git a/src/Discord.Net.Commands/Discord.Net.Commands.csproj b/src/Discord.Net.Commands/Discord.Net.Commands.csproj index 1bef1bfea..95e7db491 100644 --- a/src/Discord.Net.Commands/Discord.Net.Commands.csproj +++ b/src/Discord.Net.Commands/Discord.Net.Commands.csproj @@ -4,16 +4,11 @@ Discord.Net.Commands Discord.Commands A Discord.Net extension adding support for bot commands. - net46;netstandard1.3;netstandard2.0 - netstandard1.3;netstandard2.0 + net461;netstandard2.0;netstandard2.1 + netstandard2.0;netstandard2.1 - - - - - - + diff --git a/src/Discord.Net.Commands/Readers/UserTypeReader.cs b/src/Discord.Net.Commands/Readers/UserTypeReader.cs index 6d9f1dd8c..c0104e341 100644 --- a/src/Discord.Net.Commands/Readers/UserTypeReader.cs +++ b/src/Discord.Net.Commands/Readers/UserTypeReader.cs @@ -49,7 +49,7 @@ namespace Discord.Commands string username = input.Substring(0, index); if (ushort.TryParse(input.Substring(index + 1), out ushort discriminator)) { - var channelUser = await channelUsers.FirstOrDefault(x => x.DiscriminatorValue == discriminator && + var channelUser = await channelUsers.FirstOrDefaultAsync(x => x.DiscriminatorValue == discriminator && string.Equals(username, x.Username, StringComparison.OrdinalIgnoreCase)).ConfigureAwait(false); AddResult(results, channelUser as T, channelUser?.Username == username ? 0.85f : 0.75f); diff --git a/src/Discord.Net.Core/Discord.Net.Core.csproj b/src/Discord.Net.Core/Discord.Net.Core.csproj index 20e57d346..dd2f2afe3 100644 --- a/src/Discord.Net.Core/Discord.Net.Core.csproj +++ b/src/Discord.Net.Core/Discord.Net.Core.csproj @@ -4,13 +4,13 @@ Discord.Net.Core Discord The core components for the Discord.Net library. - net46;netstandard1.3;netstandard2.0 - netstandard1.3;netstandard2.0 + net461;netstandard2.0;netstandard2.1 + netstandard2.0;netstandard2.1 - + - + all diff --git a/src/Discord.Net.Core/Extensions/AsyncEnumerableExtensions.cs b/src/Discord.Net.Core/Extensions/AsyncEnumerableExtensions.cs index 282d20517..d96076259 100644 --- a/src/Discord.Net.Core/Extensions/AsyncEnumerableExtensions.cs +++ b/src/Discord.Net.Core/Extensions/AsyncEnumerableExtensions.cs @@ -15,7 +15,7 @@ namespace Discord /// Flattens the specified pages into one asynchronously. public static async Task> FlattenAsync(this IAsyncEnumerable> source) { - return await source.Flatten().ToArray().ConfigureAwait(false); + return await source.Flatten().ToArrayAsync().ConfigureAwait(false); } /// Flattens the specified pages into one . public static IAsyncEnumerable Flatten(this IAsyncEnumerable> source) diff --git a/src/Discord.Net.Core/Utils/Paging/PagedEnumerator.cs b/src/Discord.Net.Core/Utils/Paging/PagedEnumerator.cs index a31721875..84209902a 100644 --- a/src/Discord.Net.Core/Utils/Paging/PagedEnumerator.cs +++ b/src/Discord.Net.Core/Utils/Paging/PagedEnumerator.cs @@ -25,26 +25,28 @@ namespace Discord _nextPage = nextPage; } - public IAsyncEnumerator> GetEnumerator() => new Enumerator(this); + public IAsyncEnumerator> GetAsyncEnumerator(CancellationToken cancellationToken = new CancellationToken()) => new Enumerator(this, cancellationToken); internal class Enumerator : IAsyncEnumerator> { private readonly PagedAsyncEnumerable _source; + private readonly CancellationToken _token; private readonly PageInfo _info; public IReadOnlyCollection Current { get; private set; } - public Enumerator(PagedAsyncEnumerable source) + public Enumerator(PagedAsyncEnumerable source, CancellationToken token) { _source = source; + _token = token; _info = new PageInfo(source._start, source._count, source.PageSize); } - public async Task MoveNext(CancellationToken cancelToken) + public async ValueTask MoveNextAsync() { if (_info.Remaining == 0) return false; - var data = await _source._getPage(_info, cancelToken).ConfigureAwait(false); + var data = await _source._getPage(_info, _token).ConfigureAwait(false); Current = new Page(_info, data); _info.Page++; @@ -71,7 +73,11 @@ namespace Discord return true; } - public void Dispose() { Current = null; } + public ValueTask DisposeAsync() + { + Current = null; + return default; + } } } } diff --git a/src/Discord.Net.Examples/Discord.Net.Examples.csproj b/src/Discord.Net.Examples/Discord.Net.Examples.csproj index b02d2e6d8..ec0253428 100644 --- a/src/Discord.Net.Examples/Discord.Net.Examples.csproj +++ b/src/Discord.Net.Examples/Discord.Net.Examples.csproj @@ -1,4 +1,4 @@ - + netstandard2.0 @@ -15,7 +15,7 @@ - + diff --git a/src/Discord.Net.Providers.WS4Net/Discord.Net.Providers.WS4Net.csproj b/src/Discord.Net.Providers.WS4Net/Discord.Net.Providers.WS4Net.csproj index bfd0983ce..e143340e1 100644 --- a/src/Discord.Net.Providers.WS4Net/Discord.Net.Providers.WS4Net.csproj +++ b/src/Discord.Net.Providers.WS4Net/Discord.Net.Providers.WS4Net.csproj @@ -1,10 +1,10 @@ - + Discord.Net.Providers.WS4Net Discord.Providers.WS4Net An optional WebSocket client provider for Discord.Net using WebSocket4Net - netstandard1.3 + netstandard2.0 diff --git a/src/Discord.Net.Providers.WS4Net/WS4NetProvider.cs b/src/Discord.Net.Providers.WS4Net/WS4NetProvider.cs index 166e767d0..b56f3b4f0 100644 --- a/src/Discord.Net.Providers.WS4Net/WS4NetProvider.cs +++ b/src/Discord.Net.Providers.WS4Net/WS4NetProvider.cs @@ -1,4 +1,4 @@ -using Discord.Net.WebSockets; +using Discord.Net.WebSockets; namespace Discord.Net.Providers.WS4Net { diff --git a/src/Discord.Net.Rest/Discord.Net.Rest.csproj b/src/Discord.Net.Rest/Discord.Net.Rest.csproj index 75b69bd04..b9592f18d 100644 --- a/src/Discord.Net.Rest/Discord.Net.Rest.csproj +++ b/src/Discord.Net.Rest/Discord.Net.Rest.csproj @@ -4,16 +4,13 @@ Discord.Net.Rest Discord.Rest A core Discord.Net library containing the REST client and models. - net46;netstandard1.3;netstandard2.0 - netstandard1.3;netstandard2.0 + net461;netstandard2.0;netstandard2.1 + netstandard2.0;netstandard2.1 - - - - + diff --git a/src/Discord.Net.WebSocket/Discord.Net.WebSocket.csproj b/src/Discord.Net.WebSocket/Discord.Net.WebSocket.csproj index ddd3b7954..26a249097 100644 --- a/src/Discord.Net.WebSocket/Discord.Net.WebSocket.csproj +++ b/src/Discord.Net.WebSocket/Discord.Net.WebSocket.csproj @@ -4,15 +4,12 @@ Discord.Net.WebSocket Discord.WebSocket A core Discord.Net library containing the WebSocket client and models. - net46;netstandard1.3;netstandard2.0 - netstandard1.3;netstandard2.0 + net461;netstandard2.0;netstandard2.1 + netstandard2.0;netstandard2.1 true - - - diff --git a/src/Discord.Net.Webhook/Discord.Net.Webhook.csproj b/src/Discord.Net.Webhook/Discord.Net.Webhook.csproj index 58282d85b..f1db66363 100644 --- a/src/Discord.Net.Webhook/Discord.Net.Webhook.csproj +++ b/src/Discord.Net.Webhook/Discord.Net.Webhook.csproj @@ -4,7 +4,7 @@ Discord.Net.Webhook Discord.Webhook A core Discord.Net library containing the Webhook client and models. - netstandard1.3 + netstandard2.0;netstandard2.1 diff --git a/src/Discord.Net/Discord.Net.nuspec b/src/Discord.Net/Discord.Net.nuspec index 3aa0d6add..4b7717e58 100644 --- a/src/Discord.Net/Discord.Net.nuspec +++ b/src/Discord.Net/Discord.Net.nuspec @@ -13,21 +13,21 @@ false https://github.com/RogueException/Discord.Net/raw/dev/docs/marketing/logo/PackageLogo.png - + - - + + - + diff --git a/test/Discord.Net.Analyzers.Tests/Discord.Net.Analyzers.Tests.csproj b/test/Discord.Net.Analyzers.Tests/Discord.Net.Analyzers.Tests.csproj index 1ee986e8a..bc587657c 100644 --- a/test/Discord.Net.Analyzers.Tests/Discord.Net.Analyzers.Tests.csproj +++ b/test/Discord.Net.Analyzers.Tests/Discord.Net.Analyzers.Tests.csproj @@ -1,7 +1,7 @@  - netcoreapp2.1 + netcoreapp3.0 false @@ -15,10 +15,13 @@ - - - - + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/test/Discord.Net.Analyzers.Tests/Extensions/AppDomainPolyfill.cs b/test/Discord.Net.Analyzers.Tests/Extensions/AppDomainPolyfill.cs deleted file mode 100644 index 729bc385c..000000000 --- a/test/Discord.Net.Analyzers.Tests/Extensions/AppDomainPolyfill.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Linq; -using System.Reflection; -using Microsoft.DotNet.PlatformAbstractions; -using Microsoft.Extensions.DependencyModel; - -namespace System -{ - /// Polyfill of the AppDomain class from full framework. - internal class AppDomain - { - public static AppDomain CurrentDomain { get; private set; } - - private AppDomain() - { - } - - static AppDomain() - { - CurrentDomain = new AppDomain(); - } - - public Assembly[] GetAssemblies() - { - var rid = RuntimeEnvironment.GetRuntimeIdentifier(); - var ass = DependencyContext.Default.GetRuntimeAssemblyNames(rid); - - return ass.Select(xan => Assembly.Load(xan)).ToArray(); - } - } -} \ No newline at end of file diff --git a/test/Discord.Net.Tests.Integration/Discord.Net.Tests.Integration.csproj b/test/Discord.Net.Tests.Integration/Discord.Net.Tests.Integration.csproj index cd4aafac0..c571059ef 100644 --- a/test/Discord.Net.Tests.Integration/Discord.Net.Tests.Integration.csproj +++ b/test/Discord.Net.Tests.Integration/Discord.Net.Tests.Integration.csproj @@ -1,4 +1,4 @@ - + netcoreapp2.1 @@ -15,9 +15,12 @@ - - - + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/test/Discord.Net.Tests.Unit/Discord.Net.Tests.Unit.csproj b/test/Discord.Net.Tests.Unit/Discord.Net.Tests.Unit.csproj index 4a7898b14..357bf9531 100644 --- a/test/Discord.Net.Tests.Unit/Discord.Net.Tests.Unit.csproj +++ b/test/Discord.Net.Tests.Unit/Discord.Net.Tests.Unit.csproj @@ -1,7 +1,7 @@ - + - netcoreapp2.1 + netcoreapp3.0 false @@ -13,9 +13,12 @@ - - - + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/test/Discord.Net.Tests.Unit/MockedEntities/MockedGroupChannel.cs b/test/Discord.Net.Tests.Unit/MockedEntities/MockedGroupChannel.cs index 573ca57c3..8b4e8b0d0 100644 --- a/test/Discord.Net.Tests.Unit/MockedEntities/MockedGroupChannel.cs +++ b/test/Discord.Net.Tests.Unit/MockedEntities/MockedGroupChannel.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.Text; using System.Threading.Tasks; using Discord.Audio;