Skip to content

Commit 2250ad2

Browse files
authored
Merge pull request #1210 from mysql-net/remove-net45
Remove .NET Framework 4.5 support.
2 parents 912e2d3 + 51658c9 commit 2250ad2

29 files changed

+44
-222
lines changed

.ci/test.ps1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ pushd .\tests\SideBySide
2828

2929
echo "Executing tests with No Compression, No SSL"
3030
Copy-Item -Force ..\..\.ci\config\config.json config.json
31-
dotnet test -c Release -f net452
31+
dotnet test -c Release -f net462
3232
if ($LASTEXITCODE -ne 0){
3333
exit $LASTEXITCODE;
3434
}
35-
dotnet test -c Release -f net461
35+
dotnet test -c Release -f net7.0
3636
if ($LASTEXITCODE -ne 0){
3737
exit $LASTEXITCODE;
3838
}

src/MySqlConnector.Authentication.Ed25519/MySqlConnector.Authentication.Ed25519.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net45;netstandard2.0</TargetFrameworks>
4+
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
55
<Title>MySqlConnector Ed25519 Authentication Plugin</Title>
66
<Description>Implements the client_ed25519 authentication plugin for MariaDB.</Description>
77
<Copyright>Copyright 2019–2022 Bradley Grainger</Copyright>

src/MySqlConnector.Logging.NLog/MySqlConnector.Logging.NLog.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net45;netstandard2.0</TargetFrameworks>
4+
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
55
<Title>MySqlConnector Logging Adapter for NLog</Title>
66
<Description>Writes lightly-structured MySqlConnector logging output to NLog.</Description>
77
<Copyright>Copyright 2018–2022 Bradley Grainger</Copyright>

src/MySqlConnector.Logging.Serilog/MySqlConnector.Logging.Serilog.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net45;netstandard2.0</TargetFrameworks>
4+
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
55
<Title>MySqlConnector Logging Adapter for Serilog</Title>
66
<Description>Writes lightly-structured MySqlConnector logging output to Serilog.</Description>
77
<Copyright>Copyright 2017–2022 Bradley Grainger</Copyright>

src/MySqlConnector.Logging.log4net/MySqlConnector.Logging.log4net.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net45;netstandard2.0</TargetFrameworks>
4+
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
55
<Title>MySqlConnector Logging Adapter for log4net</Title>
66
<Description>Writes MySqlConnector logging output to log4net with one line of code.</Description>
77
<Copyright>Copyright 2017–2022 Bradley Grainger</Copyright>

src/MySqlConnector/Core/SchemaProvider.g.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ private Task FillMetaDataCollectionsAsync(IOBehavior ioBehavior, DataTable dataT
119119
dataTable.Rows.Add("UserPrivileges", 0, 0);
120120
dataTable.Rows.Add("Views", 0, 3);
121121

122-
return Utility.CompletedTask;
122+
return Task.CompletedTask;
123123
}
124124

125125
private async Task FillCharacterSetsAsync(IOBehavior ioBehavior, DataTable dataTable, string?[]? restrictionValues, CancellationToken cancellationToken)
@@ -261,7 +261,7 @@ private Task FillDataSourceInformationAsync(IOBehavior ioBehavior, DataTable dat
261261

262262
DoFillDataSourceInformation(dataTable);
263263

264-
return Utility.CompletedTask;
264+
return Task.CompletedTask;
265265
}
266266

267267
private Task FillDataTypesAsync(IOBehavior ioBehavior, DataTable dataTable, string?[]? restrictionValues, CancellationToken cancellationToken)
@@ -298,7 +298,7 @@ private Task FillDataTypesAsync(IOBehavior ioBehavior, DataTable dataTable, stri
298298

299299
DoFillDataTypes(dataTable);
300300

301-
return Utility.CompletedTask;
301+
return Task.CompletedTask;
302302
}
303303

304304
private async Task FillEnginesAsync(IOBehavior ioBehavior, DataTable dataTable, string?[]? restrictionValues, CancellationToken cancellationToken)
@@ -562,7 +562,7 @@ private Task FillReservedWordsAsync(IOBehavior ioBehavior, DataTable dataTable,
562562

563563
DoFillReservedWords(dataTable);
564564

565-
return Utility.CompletedTask;
565+
return Task.CompletedTask;
566566
}
567567

568568
private async Task FillResourceGroupsAsync(IOBehavior ioBehavior, DataTable dataTable, string?[]? restrictionValues, CancellationToken cancellationToken)
@@ -604,7 +604,7 @@ private Task FillRestrictionsAsync(IOBehavior ioBehavior, DataTable dataTable, s
604604
dataTable.Rows.Add("Tables", "Table", "TABLE_NAME", 3);
605605
dataTable.Rows.Add("Tables", "TableType", "TABLE_TYPE", 4);
606606

607-
return Utility.CompletedTask;
607+
return Task.CompletedTask;
608608
}
609609

610610
private async Task FillSchemaPrivilegesAsync(IOBehavior ioBehavior, DataTable dataTable, string?[]? restrictionValues, CancellationToken cancellationToken)

src/MySqlConnector/Core/ServerSession.cs

Lines changed: 4 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -730,13 +730,8 @@ private async Task<PayloadData> SwitchAuthenticationAsync(ConnectionSettings cs,
730730
case "sha256_password":
731731
if (!m_isSecureConnection && password.Length != 0)
732732
{
733-
#if NET45
734-
Log.Error("Session{0} can't use AuthenticationMethod '{1}' without secure connection on .NET 4.5", m_logArguments);
735-
throw new MySqlException(MySqlErrorCode.UnableToConnectToHost, "Authentication method '{0}' requires a secure connection (prior to .NET 4.6).".FormatInvariant(switchRequest.Name));
736-
#else
737733
var publicKey = await GetRsaPublicKeyAsync(switchRequest.Name, cs, ioBehavior, cancellationToken).ConfigureAwait(false);
738734
return await SendEncryptedPasswordAsync(switchRequest, publicKey, password, ioBehavior, cancellationToken).ConfigureAwait(false);
739-
#endif
740735
}
741736
else
742737
{
@@ -775,7 +770,6 @@ private async Task<PayloadData> SendClearPasswordAsync(string password, IOBehavi
775770
return await ReceiveReplyAsync(ioBehavior, cancellationToken).ConfigureAwait(false);
776771
}
777772

778-
#if !NET45
779773
private async Task<PayloadData> SendEncryptedPasswordAsync(
780774
AuthenticationMethodSwitchRequestPayload switchRequest,
781775
string rsaPublicKey,
@@ -826,9 +820,7 @@ private async Task<PayloadData> SendEncryptedPasswordAsync(
826820
await SendReplyAsync(payload, ioBehavior, cancellationToken).ConfigureAwait(false);
827821
return await ReceiveReplyAsync(ioBehavior, cancellationToken).ConfigureAwait(false);
828822
}
829-
#endif
830823

831-
#if !NET45
832824
private async Task<string> GetRsaPublicKeyAsync(string switchRequestName, ConnectionSettings cs, IOBehavior ioBehavior, CancellationToken cancellationToken)
833825
{
834826
if (cs.ServerRsaPublicKeyFile.Length != 0)
@@ -859,7 +851,6 @@ private async Task<string> GetRsaPublicKeyAsync(string switchRequestName, Connec
859851
Log.Error("Session{0} couldn't use AuthenticationMethod '{1}' because RSA key wasn't specified or couldn't be retrieved", m_logArguments);
860852
throw new MySqlException(MySqlErrorCode.UnableToConnectToHost, "Authentication method '{0}' failed. Either use a secure connection, specify the server's RSA public key with ServerRSAPublicKeyFile, or set AllowPublicKeyRetrieval=True.".FormatInvariant(switchRequestName));
861853
}
862-
#endif
863854

864855
public async ValueTask<bool> TryPingAsync(bool logInfo, IOBehavior ioBehavior, CancellationToken cancellationToken)
865856
{
@@ -1185,13 +1176,7 @@ private async Task<bool> OpenUnixSocketAsync(ConnectionSettings cs, IOBehavior i
11851176
return false;
11861177
}
11871178

1188-
#if NET45
1189-
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
1190-
#endif
11911179
private async Task<bool> OpenNamedPipeAsync(ConnectionSettings cs, int startTickCount, IOBehavior ioBehavior, CancellationToken cancellationToken)
1192-
#if NET45
1193-
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
1194-
#endif
11951180
{
11961181
if (Log.IsTraceEnabled())
11971182
Log.Trace("Session{0} connecting to NamedPipe '{1}' on Server '{2}'", m_logArguments[0], cs.PipeName, cs.HostNames![0]);
@@ -1203,12 +1188,10 @@ private async Task<bool> OpenNamedPipeAsync(ConnectionSettings cs, int startTick
12031188
{
12041189
try
12051190
{
1206-
#if !NET45
12071191
if (ioBehavior == IOBehavior.Asynchronous)
12081192
await namedPipeStream.ConnectAsync(timeout, cancellationToken).ConfigureAwait(false);
12091193
else
1210-
#endif
1211-
namedPipeStream.Connect(timeout);
1194+
namedPipeStream.Connect(timeout);
12121195
}
12131196
catch (Exception ex) when ((ex is ObjectDisposedException && cancellationToken.IsCancellationRequested) || ex is TimeoutException)
12141197
{
@@ -1295,11 +1278,8 @@ private async Task InitSslAsync(ProtocolCapabilities serverCapabilities, Connect
12951278
var certificate = new X509Certificate2(cs.CertificateFile, cs.CertificatePassword, X509KeyStorageFlags.MachineKeySet);
12961279
if (!certificate.HasPrivateKey)
12971280
{
1298-
#if NET45
1299-
certificate.Reset();
1300-
#else
13011281
certificate.Dispose();
1302-
#endif
1282+
13031283
m_logArguments[1] = cs.CertificateFile;
13041284
Log.Error("Session{0} no private key included with CertificateFile '{1}'", m_logArguments);
13051285
throw new MySqlException("CertificateFile does not contain a private key. " +
@@ -1395,11 +1375,7 @@ private async Task InitSslAsync(ProtocolCapabilities serverCapabilities, Connect
13951375
}
13961376
finally
13971377
{
1398-
#if NET45
1399-
certificateChain?.Reset();
1400-
#else
14011378
certificateChain?.Dispose();
1402-
#endif
14031379
}
14041380
}
14051381

@@ -1485,13 +1461,11 @@ await sslStream.AuthenticateAsClientAsync(clientAuthenticationOptions.TargetHost
14851461
{
14861462
#if NET5_0_OR_GREATER
14871463
sslStream.AuthenticateAsClient(clientAuthenticationOptions);
1488-
#elif NET45_OR_GREATER || NETCOREAPP2_0_OR_GREATER || NETSTANDARD2_0_OR_GREATER
1464+
#else
14891465
sslStream.AuthenticateAsClient(clientAuthenticationOptions.TargetHost,
14901466
clientAuthenticationOptions.ClientCertificates,
14911467
clientAuthenticationOptions.EnabledSslProtocols,
14921468
checkCertificateRevocation);
1493-
#else
1494-
await sslStream.AuthenticateAsClientAsync(HostName, clientCertificates, sslProtocols, checkCertificateRevocation).ConfigureAwait(false);
14951469
#endif
14961470
}
14971471
var sslByteHandler = new StreamByteHandler(sslStream);
@@ -1525,11 +1499,7 @@ await sslStream.AuthenticateAsClientAsync(clientAuthenticationOptions.TargetHost
15251499
}
15261500
finally
15271501
{
1528-
#if NET45
1529-
caCertificateChain?.Reset();
1530-
#else
15311502
caCertificateChain?.Dispose();
1532-
#endif
15331503
}
15341504

15351505
// Returns a X509CertificateCollection containing the single certificate contained in 'sslKeyFile' (PEM private key) and 'sslCertificateFile' (PEM certificate).
@@ -1588,7 +1558,7 @@ X509CertificateCollection LoadCertificate(string sslKeyFile, string sslCertifica
15881558
}
15891559
rsa.ImportParameters(rsaParameters);
15901560

1591-
#if NET45 || NET461 || NET471
1561+
#if NET461 || NET471
15921562
var certificate = new X509Certificate2(sslCertificateFile, "", X509KeyStorageFlags.MachineKeySet)
15931563
{
15941564
PrivateKey = rsa,
@@ -1705,12 +1675,7 @@ private void ShutdownSocket()
17051675
Utility.Dispose(ref m_stream);
17061676
SafeDispose(ref m_tcpClient);
17071677
SafeDispose(ref m_socket);
1708-
#if NET45
1709-
m_clientCertificate?.Reset();
1710-
m_clientCertificate = null;
1711-
#else
17121678
Utility.Dispose(ref m_clientCertificate);
1713-
#endif
17141679
m_activityTags.Clear();
17151680
m_activityTags.Add(ActivitySourceHelper.DatabaseSystemTagName, ActivitySourceHelper.DatabaseSystemValue);
17161681
}

src/MySqlConnector/MySqlBatch.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ private async Task<DbDataReader> ExecuteDbDataReaderAsync(CommandBehavior behavi
151151
private Task<MySqlDataReader> ExecuteReaderAsync(CommandBehavior behavior, IOBehavior ioBehavior, CancellationToken cancellationToken)
152152
{
153153
if (!IsValid(out var exception))
154-
return Utility.TaskFromException<MySqlDataReader>(exception);
154+
return Task.FromException<MySqlDataReader>(exception);
155155

156156
CurrentCommandBehavior = behavior;
157157
foreach (MySqlBatchCommand batchCommand in BatchCommands)
@@ -366,7 +366,7 @@ private bool NeedsPrepare(out Exception? exception)
366366
private Task PrepareAsync(IOBehavior ioBehavior, CancellationToken cancellationToken)
367367
{
368368
if (!NeedsPrepare(out var exception))
369-
return exception is null ? Utility.CompletedTask : Utility.TaskFromException(exception);
369+
return exception is null ? Task.CompletedTask : Task.FromException(exception);
370370

371371
return DoPrepareAsync(ioBehavior, cancellationToken);
372372
}

src/MySqlConnector/MySqlCommand.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ public override void Prepare()
160160
private Task PrepareAsync(IOBehavior ioBehavior, CancellationToken cancellationToken)
161161
{
162162
if (!NeedsPrepare(out var exception))
163-
return exception is null ? Utility.CompletedTask : Utility.TaskFromException(exception);
163+
return exception is null ? Task.CompletedTask : Task.FromException(exception);
164164

165165
return Connection!.Session.PrepareAsync(this, ioBehavior, cancellationToken);
166166
}
@@ -347,7 +347,7 @@ internal async Task<MySqlDataReader> ExecuteReaderAsync(CommandBehavior behavior
347347
internal Task<MySqlDataReader> ExecuteReaderNoResetTimeoutAsync(CommandBehavior behavior, IOBehavior ioBehavior, CancellationToken cancellationToken)
348348
{
349349
if (!IsValid(out var exception))
350-
return Utility.TaskFromException<MySqlDataReader>(exception);
350+
return Task.FromException<MySqlDataReader>(exception);
351351

352352
var activity = NoActivity ? null : Connection!.Session.StartActivity(ActivitySourceHelper.ExecuteActivityName,
353353
ActivitySourceHelper.DatabaseStatementTagName, CommandText);
@@ -375,7 +375,7 @@ public Task DisposeAsync()
375375
#if NETCOREAPP3_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER
376376
return default;
377377
#else
378-
return Utility.CompletedTask;
378+
return Task.CompletedTask;
379379
#endif
380380
}
381381

src/MySqlConnector/MySqlConnector.csproj

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net45;net461;net471;netstandard2.0;netstandard2.1;netcoreapp3.1;net6.0;net7.0</TargetFrameworks>
4+
<TargetFrameworks>net461;net471;netstandard2.0;netstandard2.1;netcoreapp3.1;net6.0;net7.0</TargetFrameworks>
55
<Description>A truly async MySQL ADO.NET provider, supporting MySQL Server, MariaDB, Percona Server, Amazon Aurora, Azure Database for MySQL and more.</Description>
66
<Copyright>Copyright 2016–2022 Bradley Grainger</Copyright>
77
<Authors>Bradley Grainger</Authors>
@@ -15,22 +15,18 @@
1515
<ImplicitUsings>enable</ImplicitUsings>
1616
</PropertyGroup>
1717

18-
<ItemGroup Condition=" '$(TargetFramework)' == 'net45' OR '$(TargetFramework)' == 'net461' OR '$(TargetFramework)' == 'net471' ">
18+
<ItemGroup Condition=" '$(TargetFramework)' == 'net461' OR '$(TargetFramework)' == 'net471' ">
1919
<Reference Include="System.Transactions" />
2020
<Using Remove="System.Net.Http" />
2121
</ItemGroup>
2222

23-
<ItemGroup Condition=" '$(TargetFramework)' == 'net45' OR '$(TargetFramework)' == 'net461' OR '$(TargetFramework)' == 'net471' OR '$(TargetFramework)' == 'netstandard2.0' ">
23+
<ItemGroup Condition=" '$(TargetFramework)' == 'net461' OR '$(TargetFramework)' == 'net471' OR '$(TargetFramework)' == 'netstandard2.0' ">
2424
<PackageReference Include="IndexRange" Version="1.0.2" PrivateAssets="All" />
2525
<PackageReference Include="System.Buffers" Version="4.5.1" />
2626
<PackageReference Include="System.Memory" Version="4.5.5" />
2727
<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.4" />
2828
</ItemGroup>
2929

30-
<ItemGroup Condition=" '$(TargetFramework)' == 'net45' ">
31-
<PackageReference Include="System.Diagnostics.DiagnosticSource" Version="5.0.1" />
32-
</ItemGroup>
33-
3430
<ItemGroup Condition=" '$(TargetFramework)' == 'net461' OR '$(TargetFramework)' == 'net471' OR '$(TargetFramework)' == 'netstandard2.0' OR '$(TargetFramework)' == 'netstandard2.1' OR '$(TargetFramework)' == 'netcoreapp3.1' ">
3531
<PackageReference Include="System.Diagnostics.DiagnosticSource" Version="6.0.0" />
3632
</ItemGroup>

0 commit comments

Comments
 (0)