فهرست منبع

升级到 .NET 9.0

Roc 11 ماه پیش
والد
کامیت
2a0a515eee

+ 3 - 3
Directory.Build.props

@@ -21,8 +21,8 @@
     <GenerateDocumentationFile Condition="'$(Configuration)' == 'Release'">true</GenerateDocumentationFile>
     <GeneratePackageOnBuild Condition="'$(Configuration)' == 'Release'">true</GeneratePackageOnBuild>
     <LangVersion>latest</LangVersion>
-    <SystemTextJsonPackageVersion>8.0.5</SystemTextJsonPackageVersion>
-    <MicrosoftExtensionsHttpPackageVersion>8.0.1</MicrosoftExtensionsHttpPackageVersion>
+    <SystemTextJsonPackageVersion>9.0.0</SystemTextJsonPackageVersion>
+    <MicrosoftExtensionsHttpPackageVersion>9.0.0</MicrosoftExtensionsHttpPackageVersion>
   </PropertyGroup>
 
   <ItemGroup>
@@ -31,7 +31,7 @@
     <None Include="$(MSBuildThisFileDirectory)README.md" Pack="true" Visible="false" PackagePath="" />
   </ItemGroup>
 
-  <ItemGroup>
+  <ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1' or '$(TargetFramework)' == 'net6.0' or '$(TargetFramework)' == 'net7.0' or '$(TargetFramework)' == 'net8.0'">
     <PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
   </ItemGroup>
 

+ 1 - 1
global.json

@@ -1,6 +1,6 @@
 {
   "sdk": {
-    "version": "8.0.403",
+    "version": "9.0.100",
     "rollForward": "latestFeature"
   }
 }

+ 1 - 1
samples/WebApplicationSample/WebApplicationSample.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk.Web">
 
   <PropertyGroup>
-    <TargetFramework>net8.0</TargetFramework>
+    <TargetFramework>net9.0</TargetFramework>
     <UserSecretsId>a59ca38e-9b52-44fe-b3d2-8cb5a1641623</UserSecretsId>
     <SignAssembly>false</SignAssembly>
     <GenerateDocumentationFile>false</GenerateDocumentationFile>

+ 2 - 2
src/Essensoft.Paylink.Alipay/Essensoft.Paylink.Alipay.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFrameworks>netstandard2.1;netcoreapp3.1;net6.0;net7.0;net8.0</TargetFrameworks>
+    <TargetFrameworks>netstandard2.1;netcoreapp3.1;net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
     <PackageId>Essensoft.Paylink.Alipay</PackageId>
     <PackageTags>Essensoft;Paylink;Alipay;支付宝</PackageTags>
   </PropertyGroup>
@@ -11,7 +11,7 @@
     <PackageReference Include="Microsoft.Extensions.Http" Version="$(MicrosoftExtensionsHttpPackageVersion)" />
   </ItemGroup>
 
-  <ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1' or '$(TargetFramework)' == 'net6.0' or '$(TargetFramework)' == 'net7.0' or '$(TargetFramework)' == 'net8.0'">
+  <ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1' or '$(TargetFramework)' == 'net6.0' or '$(TargetFramework)' == 'net7.0' or '$(TargetFramework)' == 'net8.0' or '$(TargetFramework)' == 'net9.0'">
     <FrameworkReference Include="Microsoft.AspNetCore.App" />
   </ItemGroup>
 

+ 12 - 0
src/Essensoft.Paylink.Alipay/Utility/AlipayCertUtil.cs

@@ -64,15 +64,27 @@ namespace Essensoft.Paylink.Alipay.Utility
             {
                 if (File.Exists(certificate))
                 {
+#if NET9_0_OR_GREATER
+                    return X509CertificateLoader.LoadCertificateFromFile(certificate);
+#else
                     return new X509Certificate2(certificate);
+#endif
                 }
                 else if (Base64Util.IsBase64String(certificate))
                 {
+#if NET9_0_OR_GREATER
+                    return X509CertificateLoader.LoadCertificate(Convert.FromBase64String(certificate));
+#else
                     return new X509Certificate2(Convert.FromBase64String(certificate));
+#endif
                 }
                 else
                 {
+#if NET9_0_OR_GREATER
+                    return X509CertificateLoader.LoadCertificate(Encoding.ASCII.GetBytes(certificate));
+#else
                     return new X509Certificate2(Encoding.ASCII.GetBytes(certificate));
+#endif
                 }
             }
             catch (CryptographicException ex)

+ 1 - 5
src/Essensoft.Paylink.Alipay/Utility/FileItem.cs

@@ -101,11 +101,7 @@ namespace Essensoft.Paylink.Alipay.Utility
         {
             if (content == null && fileInfo != null && fileInfo.Exists)
             {
-                using (var fileStream = fileInfo.OpenRead())
-                {
-                    content = new byte[fileStream.Length];
-                    fileStream.Read(content, 0, content.Length);
-                }
+                content = File.ReadAllBytes(fileInfo.FullName);
             }
 
             return content;

+ 1 - 1
src/Essensoft.Paylink.Security/Essensoft.Paylink.Security.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0</TargetFrameworks>
+    <TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
     <PackageId>Essensoft.Paylink.Security</PackageId>
     <PackageTags>Essensoft;Paylink;Security</PackageTags>
   </PropertyGroup>

+ 2 - 2
src/Essensoft.Paylink.WeChatPay/Essensoft.Paylink.WeChatPay.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFrameworks>netstandard2.1;netcoreapp3.1;net6.0;net7.0;net8.0</TargetFrameworks>
+    <TargetFrameworks>netstandard2.1;netcoreapp3.1;net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
     <PackageId>Essensoft.Paylink.WeChatPay</PackageId>
     <PackageTags>Essensoft;Paylink;WeChatPay;微信支付</PackageTags>
   </PropertyGroup>
@@ -11,7 +11,7 @@
     <PackageReference Include="Microsoft.Extensions.Http" Version="$(MicrosoftExtensionsHttpPackageVersion)" />
   </ItemGroup>
 
-  <ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1' or '$(TargetFramework)' == 'net6.0' or '$(TargetFramework)' == 'net7.0' or '$(TargetFramework)' == 'net8.0'">
+  <ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1' or '$(TargetFramework)' == 'net6.0' or '$(TargetFramework)' == 'net7.0' or '$(TargetFramework)' == 'net8.0' or '$(TargetFramework)' == 'net9.0'">
     <FrameworkReference Include="Microsoft.AspNetCore.App" />
   </ItemGroup>
 

+ 7 - 2
src/Essensoft.Paylink.WeChatPay/V2/WeChatPayHttpMessageHandlerBuilderFilter.cs

@@ -24,9 +24,14 @@ namespace Essensoft.Paylink.WeChatPay.V2
             {
                 next(builder);
 
-                if (builder.PrimaryHandler is HttpClientHandler handler)
+                if (builder.Name.Contains(WeChatPayClient.Prefix))
                 {
-                    if (builder.Name.Contains(WeChatPayClient.Prefix))
+                    if (builder.PrimaryHandler is not HttpClientHandler)
+                    {
+                        builder.PrimaryHandler = new HttpClientHandler();
+                    }
+
+                    if (builder.PrimaryHandler is  HttpClientHandler handler)
                     {
                         var certificateSerialNo = builder.Name.RemovePreFix(WeChatPayClient.Prefix);
                         if (_clientCertificateManager.TryGetValue(certificateSerialNo, out var clientCertificate))

+ 10 - 6
src/Essensoft.Paylink.WeChatPay/V3/WeChatPayPlatformCertificateManager.cs

@@ -43,9 +43,11 @@ namespace Essensoft.Paylink.WeChatPay.V3
                             case nameof(AEAD_AES_256_GCM):
                                 {
                                     var certStr = AEAD_AES_256_GCM.Decrypt(certificate.EncryptCertificate.Nonce, certificate.EncryptCertificate.Ciphertext, certificate.EncryptCertificate.AssociatedData, options.APIv3Key);
-
-                                    var x509cert = new X509Certificate2(Encoding.ASCII.GetBytes(certStr), string.Empty, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
-
+#if NET9_0_OR_GREATER
+                                    var x509cert = X509CertificateLoader.LoadPkcs12(Encoding.UTF8.GetBytes(certStr), string.Empty, X509KeyStorageFlags.DefaultKeySet | X509KeyStorageFlags.Exportable);
+#else
+                                    var x509cert = new X509Certificate2(Encoding.UTF8.GetBytes(certStr), string.Empty, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
+#endif
                                     var cert = new WeChatPayPlatformCertificate
                                     {
                                         MchId = options.MchId,
@@ -111,9 +113,11 @@ namespace Essensoft.Paylink.WeChatPay.V3
                             case nameof(AEAD_AES_256_GCM):
                                 {
                                     var certStr = AEAD_AES_256_GCM.Decrypt(certificate.EncryptCertificate.Nonce, certificate.EncryptCertificate.Ciphertext, certificate.EncryptCertificate.AssociatedData, options.APIv3Key);
-
-                                    var x509cert = new X509Certificate2(Encoding.ASCII.GetBytes(certStr), string.Empty, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
-
+#if NET9_0_OR_GREATER
+                                    var x509cert = X509CertificateLoader.LoadPkcs12(Encoding.UTF8.GetBytes(certStr), string.Empty, X509KeyStorageFlags.DefaultKeySet | X509KeyStorageFlags.Exportable);
+#else
+                                    var x509cert = new X509Certificate2(Encoding.UTF8.GetBytes(certStr), string.Empty, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
+#endif
                                     var cert = new WeChatPayPlatformCertificate
                                     {
                                         MchId = options.MchId,

+ 8 - 0
src/Essensoft.Paylink.WeChatPay/WeChatPayOptions.cs

@@ -136,11 +136,19 @@ namespace Essensoft.Paylink.WeChatPay
             {
                 if (File.Exists(Certificate))
                 {
+#if NET9_0_OR_GREATER
+                    Certificate2 = X509CertificateLoader.LoadPkcs12FromFile(Certificate, CertificatePassword, X509KeyStorageFlags.DefaultKeySet | X509KeyStorageFlags.Exportable);
+#else
                     Certificate2 = new X509Certificate2(Certificate, CertificatePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
+#endif
                 }
                 else
                 {
+#if NET9_0_OR_GREATER
+                    Certificate2 = X509CertificateLoader.LoadPkcs12(Convert.FromBase64String(Certificate), CertificatePassword, X509KeyStorageFlags.DefaultKeySet | X509KeyStorageFlags.Exportable);
+#else
                     Certificate2 = new X509Certificate2(Convert.FromBase64String(Certificate), CertificatePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
+#endif
                 }
 
                 CertificateSerialNo = Certificate2.GetSerialNumberString();