From 907629a2ca444e46eb1dffcd1e7bcc1090c59577 Mon Sep 17 00:00:00 2001
From: Ray <zai7lou@outlook.com>
Date: Fri, 1 Apr 2022 23:24:47 +0800
Subject: [PATCH 01/10] feat: [#62] update codeql-analysis.yml to filter files
 to be checked

---
 .github/workflows/codeql-analysis.yml | 10 ++++++++++
 CHANGELOG.md                          |  2 ++
 common.props                          |  2 +-
 3 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index a1e6329f4..9a87d2f80 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -14,9 +14,19 @@ name: "CodeQL"
 on:
   push:
     branches: [ main, develop, release/* ]
+    paths:
+      - '**/*.js'
+      - '**/*.cs'
+      - '**/*.cshtml'
+      - '**/*.csproj'
   pull_request:
     # The branches below must be a subset of the branches above
     branches: [ main, develop ]
+    paths:
+      - '**/*.js'
+      - '**/*.cs'
+      - '**/*.cshtml'
+      - '**/*.csproj'
 
 jobs:
   analyze:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9937bb391..3044ec5f2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -29,3 +29,5 @@
 - 【#27】更新README
 ## 0.0.9
 - 【#47】青龙安装dotnet环境,支持arm架构服务器
+## 0.0.10
+- 【#62】codeql-analysis.yml可以指定检查的文件类型
diff --git a/common.props b/common.props
index 590025d77..3254ed9b6 100644
--- a/common.props
+++ b/common.props
@@ -1,7 +1,7 @@
 <Project>
   <PropertyGroup>
     <Authors>Ray</Authors>
-    <Version>0.0.9</Version>
+    <Version>0.0.10</Version>
     <NoWarn>$(NoWarn);CS1591;CS0436</NoWarn>
   </PropertyGroup>
 </Project>

From ebccded9565084f6819c4da9b77cc8aa4d9d0b07 Mon Sep 17 00:00:00 2001
From: Ray <zai7lou@outlook.com>
Date: Fri, 1 Apr 2022 23:27:25 +0800
Subject: [PATCH 02/10] feat: [61] publish-image.yml support choosing whether
 be with latest tag

---
 .github/workflows/publish-image.yml | 11 +++++++++--
 CHANGELOG.md                        |  1 +
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/publish-image.yml b/.github/workflows/publish-image.yml
index ed8e5a977..af995b355 100644
--- a/.github/workflows/publish-image.yml
+++ b/.github/workflows/publish-image.yml
@@ -4,8 +4,15 @@ on:
   workflow_dispatch:
     inputs:
       manualTag:
-        description: 'tag'
+        description: 'Manual Tag'
         required: true
+      manualWithLatestTag:
+        description: 'Manual With Latest Tag'
+        required: true
+        default: 'true'
+        options:
+        - true
+        - false
   release:
     types: [published]
 
@@ -77,7 +84,7 @@ jobs:
         run: |
           DOCKER_IMAGE_TAG="zai7lou/bilibili_tool_pro:${{ steps.getRepoTag.outputs.repoTag }}"
           DOCKER_IMAGE_LATEST_TAG=",zai7lou/bilibili_tool_pro:latest"
-          if [ "${{ github.event.inputs.manualTag }}" ] ; then
+          if [ "${{ github.event.inputs.manualTag }}" ] $$ [ "${{ github.event.inputs.manualTag }}" == "false" ] ; then
             DOCKER_IMAGE_LATEST_TAG=""
           fi
           DOCKER_IMAGE_TAGS=$DOCKER_IMAGE_TAG$DOCKER_IMAGE_LATEST_TAG
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3044ec5f2..238aff6f0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -31,3 +31,4 @@
 - 【#47】青龙安装dotnet环境,支持arm架构服务器
 ## 0.0.10
 - 【#62】codeql-analysis.yml可以指定检查的文件类型
+- 【#61】publish-image.yml手动打镜像时支持指定是否打latest的tag

From faf1614f8a3b501c17a441cd33587c78031a1569 Mon Sep 17 00:00:00 2001
From: Ray <zai7lou@outlook.com>
Date: Fri, 1 Apr 2022 23:37:43 +0800
Subject: [PATCH 03/10] feat: [61] publish-image.yml support choosing whether
 be with latest tag

---
 .github/workflows/publish-image.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/publish-image.yml b/.github/workflows/publish-image.yml
index af995b355..a4fd76ef0 100644
--- a/.github/workflows/publish-image.yml
+++ b/.github/workflows/publish-image.yml
@@ -84,7 +84,7 @@ jobs:
         run: |
           DOCKER_IMAGE_TAG="zai7lou/bilibili_tool_pro:${{ steps.getRepoTag.outputs.repoTag }}"
           DOCKER_IMAGE_LATEST_TAG=",zai7lou/bilibili_tool_pro:latest"
-          if [ "${{ github.event.inputs.manualTag }}" ] $$ [ "${{ github.event.inputs.manualTag }}" == "false" ] ; then
+          if [ "${{ github.event.inputs.manualTag }}" ] && [ "${{ github.event.inputs.manualTag }}" == "false" ] ; then
             DOCKER_IMAGE_LATEST_TAG=""
           fi
           DOCKER_IMAGE_TAGS=$DOCKER_IMAGE_TAG$DOCKER_IMAGE_LATEST_TAG

From b69bd07481c2ff2fcc4ed08d345455ac261b4e03 Mon Sep 17 00:00:00 2001
From: Ray <zai7lou@outlook.com>
Date: Fri, 1 Apr 2022 23:43:03 +0800
Subject: [PATCH 04/10] feat: [61] publish-image.yml support choosing whether
 be with latest tag

---
 .github/workflows/publish-image.yml | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/.github/workflows/publish-image.yml b/.github/workflows/publish-image.yml
index a4fd76ef0..035d082be 100644
--- a/.github/workflows/publish-image.yml
+++ b/.github/workflows/publish-image.yml
@@ -9,10 +9,8 @@ on:
       manualWithLatestTag:
         description: 'Manual With Latest Tag'
         required: true
-        default: 'true'
-        options:
-        - true
-        - false
+        default: true
+        type: boolean
   release:
     types: [published]
 
@@ -84,7 +82,7 @@ jobs:
         run: |
           DOCKER_IMAGE_TAG="zai7lou/bilibili_tool_pro:${{ steps.getRepoTag.outputs.repoTag }}"
           DOCKER_IMAGE_LATEST_TAG=",zai7lou/bilibili_tool_pro:latest"
-          if [ "${{ github.event.inputs.manualTag }}" ] && [ "${{ github.event.inputs.manualTag }}" == "false" ] ; then
+          if [ "${{ github.event.inputs.manualTag }}" ] && [ "${{ github.event.inputs.manualWithLatestTag }}" == "false" ] ; then
             DOCKER_IMAGE_LATEST_TAG=""
           fi
           DOCKER_IMAGE_TAGS=$DOCKER_IMAGE_TAG$DOCKER_IMAGE_LATEST_TAG

From 4c284039e45b2f6c8ed1113d9d283faae18757d6 Mon Sep 17 00:00:00 2001
From: Ray <zai7lou@outlook.com>
Date: Sun, 3 Apr 2022 20:02:36 +0800
Subject: [PATCH 05/10] feat: [#32] add serilog client of work weixin app for
 notify

---
 CHANGELOG.md                                  |  3 +-
 Ray.BiliBiliTool.sln                          |  9 +-
 common.props                                  |  2 +-
 .../Ray.BiliBiliTool.Agent.csproj             | 10 +-
 .../Ray.BiliBiliTool.Application.csproj       |  6 +-
 .../Ray.BiliBiliTool.Config.csproj            | 12 +--
 .../Ray.BiliBiliTool.Console.csproj           | 29 +++---
 src/Ray.BiliBiliTool.Console/appsettings.json | 13 +++
 .../Ray.BiliBiliTool.DomainService.csproj     |  6 +-
 .../Ray.BiliBiliTool.Infrastructure.csproj    |  6 +-
 ....Serilog.Sinks.WorkWeiXinAppBatched.csproj | 14 +++
 .../WorkWeiXinAppApiClient.cs                 | 92 +++++++++++++++++++
 .../WorkWeiXinAppBatchedSink.cs               | 59 ++++++++++++
 .../WorkWeiXinAppConfigurationExtensions.cs   | 50 ++++++++++
 .../WorkWeiXinAppTokenResponse.cs             | 19 ++++
 test/BiliAgentTest/BiliAgentTest.csproj       |  4 +-
 test/ConfigTest/ConfigTest.csproj             |  4 +-
 test/LogTest/LogTest.csproj                   |  4 +-
 test/LogTest/TestWorkWeiXinApp.cs             | 42 +++++++++
 19 files changed, 341 insertions(+), 43 deletions(-)
 create mode 100644 src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/Ray.Serilog.Sinks.WorkWeiXinAppBatched.csproj
 create mode 100644 src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/WorkWeiXinAppApiClient.cs
 create mode 100644 src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/WorkWeiXinAppBatchedSink.cs
 create mode 100644 src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/WorkWeiXinAppConfigurationExtensions.cs
 create mode 100644 src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/WorkWeiXinAppTokenResponse.cs
 create mode 100644 test/LogTest/TestWorkWeiXinApp.cs

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 238aff6f0..baa6d1f5f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -29,6 +29,7 @@
 - 【#27】更新README
 ## 0.0.9
 - 【#47】青龙安装dotnet环境,支持arm架构服务器
-## 0.0.10
+## 0.1.0
 - 【#62】codeql-analysis.yml可以指定检查的文件类型
 - 【#61】publish-image.yml手动打镜像时支持指定是否打latest的tag
+- 【#32】新增企业微信的应用推送,实现微信接受推送消息
diff --git a/Ray.BiliBiliTool.sln b/Ray.BiliBiliTool.sln
index 41fd70ae3..9fdbba7aa 100644
--- a/Ray.BiliBiliTool.sln
+++ b/Ray.BiliBiliTool.sln
@@ -148,7 +148,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{75A9CC5C
 		docker\build\buildImage_arm64.cmd = docker\build\buildImage_arm64.cmd
 	EndProjectSection
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ray.Serilog.Sinks.MicrosoftTeams", "src\Ray.Serilog.Sinks\Ray.Serilog.Sinks.MicrosoftTeams\Ray.Serilog.Sinks.MicrosoftTeams.csproj", "{F249A822-EFD3-4F0A-9C10-95A96676D61A}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ray.Serilog.Sinks.MicrosoftTeams", "src\Ray.Serilog.Sinks\Ray.Serilog.Sinks.MicrosoftTeams\Ray.Serilog.Sinks.MicrosoftTeams.csproj", "{F249A822-EFD3-4F0A-9C10-95A96676D61A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ray.Serilog.Sinks.WorkWeiXinAppBatched", "src\Ray.Serilog.Sinks\Ray.Serilog.Sinks.WorkWeiXinAppBatched\Ray.Serilog.Sinks.WorkWeiXinAppBatched.csproj", "{099C4E10-1114-495C-A664-63A15E77B31A}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -232,6 +234,10 @@ Global
 		{F249A822-EFD3-4F0A-9C10-95A96676D61A}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{F249A822-EFD3-4F0A-9C10-95A96676D61A}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F249A822-EFD3-4F0A-9C10-95A96676D61A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{099C4E10-1114-495C-A664-63A15E77B31A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{099C4E10-1114-495C-A664-63A15E77B31A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{099C4E10-1114-495C-A664-63A15E77B31A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{099C4E10-1114-495C-A664-63A15E77B31A}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -270,6 +276,7 @@ Global
 		{F6B8ED3A-5428-4D26-8172-8B41FBF0C4CF} = {E9BDDCBE-A57D-4E3B-8252-708088386ADF}
 		{75A9CC5C-DF92-4D72-A14C-625AA902855B} = {A93210FD-27B6-40E4-B08D-391F96CA2754}
 		{F249A822-EFD3-4F0A-9C10-95A96676D61A} = {4BAFC980-7A73-45C3-9460-8B8CCB87939B}
+		{099C4E10-1114-495C-A664-63A15E77B31A} = {4BAFC980-7A73-45C3-9460-8B8CCB87939B}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {197319DA-1148-4A99-847C-8B270B6A29AB}
diff --git a/common.props b/common.props
index 3254ed9b6..eaec7b658 100644
--- a/common.props
+++ b/common.props
@@ -1,7 +1,7 @@
 <Project>
   <PropertyGroup>
     <Authors>Ray</Authors>
-    <Version>0.0.10</Version>
+    <Version>0.1.0</Version>
     <NoWarn>$(NoWarn);CS1591;CS0436</NoWarn>
   </PropertyGroup>
 </Project>
diff --git a/src/Ray.BiliBiliTool.Agent/Ray.BiliBiliTool.Agent.csproj b/src/Ray.BiliBiliTool.Agent/Ray.BiliBiliTool.Agent.csproj
index 10d94607d..42789ea9c 100644
--- a/src/Ray.BiliBiliTool.Agent/Ray.BiliBiliTool.Agent.csproj
+++ b/src/Ray.BiliBiliTool.Agent/Ray.BiliBiliTool.Agent.csproj
@@ -5,11 +5,11 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0" />
-    <PackageReference Include="Microsoft.Extensions.Http.Polly" Version="5.0.1" />
-    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0" />
-    <PackageReference Include="Scrutor" Version="3.3.0" />
-    <PackageReference Include="WebApiClientCore" Version="2.0.1" />
+    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Http.Polly" Version="6.0.3" />
+    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.1" />
+    <PackageReference Include="Scrutor" Version="4.1.0" />
+    <PackageReference Include="WebApiClientCore" Version="2.0.2" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/src/Ray.BiliBiliTool.Application/Ray.BiliBiliTool.Application.csproj b/src/Ray.BiliBiliTool.Application/Ray.BiliBiliTool.Application.csproj
index 425876e4b..9de70e91c 100644
--- a/src/Ray.BiliBiliTool.Application/Ray.BiliBiliTool.Application.csproj
+++ b/src/Ray.BiliBiliTool.Application/Ray.BiliBiliTool.Application.csproj
@@ -5,9 +5,9 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="MethodBoundaryAspect.Fody" Version="2.0.139" />
-    <PackageReference Include="Microsoft.Extensions.Http" Version="5.0.0" />
-    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0" />
+    <PackageReference Include="MethodBoundaryAspect.Fody" Version="2.0.145" />
+    <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.1" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/src/Ray.BiliBiliTool.Config/Ray.BiliBiliTool.Config.csproj b/src/Ray.BiliBiliTool.Config/Ray.BiliBiliTool.Config.csproj
index 73297cbb2..ff4851aa8 100644
--- a/src/Ray.BiliBiliTool.Config/Ray.BiliBiliTool.Config.csproj
+++ b/src/Ray.BiliBiliTool.Config/Ray.BiliBiliTool.Config.csproj
@@ -5,12 +5,12 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0" />
-    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="5.0.0" />
-    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0" />
-    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0" />
-    <PackageReference Include="Microsoft.Extensions.Options" Version="5.0.0" />
-    <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="5.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.1" />
+    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.1" />
+    <PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="6.0.0" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj b/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj
index 2a525d2db..dd571528c 100644
--- a/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj
+++ b/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj
@@ -47,22 +47,22 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0" />
-    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="5.0.0" />
-    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.1" />
-    <PackageReference Include="Microsoft.Extensions.Hosting" Version="5.0.0" />
-    <PackageReference Include="Microsoft.Extensions.Http" Version="5.0.0" />
-    <PackageReference Include="Microsoft.Extensions.Logging" Version="5.0.0" />
-    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0" />
-    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="5.0.0" />
-    <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.13" />
+    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="6.0.1" />
+    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.1" />
+    <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.1" />
+    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="6.0.0" />
+    <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.15.0" />
     <PackageReference Include="Serilog" Version="2.10.0" />
-    <PackageReference Include="Serilog.Extensions.Hosting" Version="4.1.2" />
-    <PackageReference Include="Serilog.Extensions.Logging" Version="3.0.1" />
-    <PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
-    <PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
+    <PackageReference Include="Serilog.Extensions.Hosting" Version="4.2.0" />
+    <PackageReference Include="Serilog.Extensions.Logging" Version="3.1.0" />
+    <PackageReference Include="Serilog.Settings.Configuration" Version="3.3.0" />
+    <PackageReference Include="Serilog.Sinks.Console" Version="4.0.1" />
     <PackageReference Include="Serilog.Sinks.Debug" Version="2.0.0" />
-    <PackageReference Include="Serilog.Sinks.File" Version="4.1.0" />
+    <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
     <PackageReference Include="System.Collections" Version="4.3.0" />
   </ItemGroup>
 
@@ -81,6 +81,7 @@
     <ProjectReference Include="..\Ray.Serilog.Sinks\Ray.Serilog.Sinks.PushPlusBatched\Ray.Serilog.Sinks.PushPlusBatched.csproj" />
     <ProjectReference Include="..\Ray.Serilog.Sinks\Ray.Serilog.Sinks.ServerChanBatched\Ray.Serilog.Sinks.ServerChanBatched.csproj" />
     <ProjectReference Include="..\Ray.Serilog.Sinks\Ray.Serilog.Sinks.TelegramBatched\Ray.Serilog.Sinks.TelegramBatched.csproj" />
+    <ProjectReference Include="..\Ray.Serilog.Sinks\Ray.Serilog.Sinks.WorkWeiXinAppBatched\Ray.Serilog.Sinks.WorkWeiXinAppBatched.csproj" />
     <ProjectReference Include="..\Ray.Serilog.Sinks\Ray.Serilog.Sinks.WorkWeiXinBatched\Ray.Serilog.Sinks.WorkWeiXinBatched.csproj" />
   </ItemGroup>
 
diff --git a/src/Ray.BiliBiliTool.Console/appsettings.json b/src/Ray.BiliBiliTool.Console/appsettings.json
index 149f00fd5..59e8f3825 100644
--- a/src/Ray.BiliBiliTool.Console/appsettings.json
+++ b/src/Ray.BiliBiliTool.Console/appsettings.json
@@ -162,6 +162,19 @@
           "webhook": "", //webhook完整地址
           "restrictedToMinimumLevel": "Information"
         }
+      },
+      //11.企业微信应用推送
+      {
+        "Name": "WorkWeiXinAppBatched",
+        "Args": {
+          "corpId": "",
+          "agentId": "",
+          "secret": "",
+          "toUser": "@all",
+          "toParty": "",
+          "toTag": "",
+          "restrictedToMinimumLevel": "Information"
+        }
       }
     ],
     "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]
diff --git a/src/Ray.BiliBiliTool.DomainService/Ray.BiliBiliTool.DomainService.csproj b/src/Ray.BiliBiliTool.DomainService/Ray.BiliBiliTool.DomainService.csproj
index efcd9fa06..675e9aafd 100644
--- a/src/Ray.BiliBiliTool.DomainService/Ray.BiliBiliTool.DomainService.csproj
+++ b/src/Ray.BiliBiliTool.DomainService/Ray.BiliBiliTool.DomainService.csproj
@@ -5,9 +5,9 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.Extensions.Http" Version="5.0.0" />
-    <PackageReference Include="Microsoft.Extensions.Options" Version="5.0.0" />
-    <PackageReference Include="Scrutor" Version="3.3.0" />
+    <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
+    <PackageReference Include="Scrutor" Version="4.1.0" />
     <PackageReference Include="Serilog" Version="2.10.0" />
   </ItemGroup>
 
diff --git a/src/Ray.BiliBiliTool.Infrastructure/Ray.BiliBiliTool.Infrastructure.csproj b/src/Ray.BiliBiliTool.Infrastructure/Ray.BiliBiliTool.Infrastructure.csproj
index 185359b4f..ea1bccbe6 100644
--- a/src/Ray.BiliBiliTool.Infrastructure/Ray.BiliBiliTool.Infrastructure.csproj
+++ b/src/Ray.BiliBiliTool.Infrastructure/Ray.BiliBiliTool.Infrastructure.csproj
@@ -5,9 +5,9 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0" />
-    <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="5.0.0" />
-    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.1" />
     <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/Ray.Serilog.Sinks.WorkWeiXinAppBatched.csproj b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/Ray.Serilog.Sinks.WorkWeiXinAppBatched.csproj
new file mode 100644
index 000000000..23dca6dc7
--- /dev/null
+++ b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/Ray.Serilog.Sinks.WorkWeiXinAppBatched.csproj
@@ -0,0 +1,14 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Ray.BiliBiliTool.Infrastructure\Ray.BiliBiliTool.Infrastructure.csproj" />
+    <ProjectReference Include="..\Ray.Serilog.Sinks.Batched\Ray.Serilog.Sinks.Batched.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/WorkWeiXinAppApiClient.cs b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/WorkWeiXinAppApiClient.cs
new file mode 100644
index 000000000..b5df26b41
--- /dev/null
+++ b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/WorkWeiXinAppApiClient.cs
@@ -0,0 +1,92 @@
+using System.Text;
+using Ray.Serilog.Sinks.Batched;
+
+namespace Ray.Serilog.Sinks.WorkWeiXinAppBatched
+{
+    public class WorkWeiXinAppApiClient : PushService
+    {
+        // https://developer.work.weixin.qq.com/tutorial/application-message
+        // https://developer.work.weixin.qq.com/document/34479
+        // https://github.com/JeffreySu/WeiXinMPSDK
+
+        private readonly Uri _apiUrl;
+        private readonly HttpClient _httpClient = new HttpClient();
+        private readonly string _corpId;
+        private readonly string _agentId;
+        private readonly string _secret;
+
+        private readonly string _toUser;
+        private readonly string _toParty;
+        private readonly string _toTag;
+
+        public WorkWeiXinAppApiClient(
+            string corpid,
+            string agentId,
+            string secret,
+            string toUser = "",
+            string toParty = "",
+            string toTag = ""
+            )
+        {
+
+            _corpId = corpid;
+            _agentId = agentId;
+            _secret = secret;
+            _toUser = toUser;
+            _toParty = toParty;
+            _toTag = toTag;
+
+            // token
+            var token = GetAccessToken(corpid, secret);
+            _apiUrl = new Uri($"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={token}");
+        }
+
+        public override string ClientName => "WorkWeiXinApp";
+
+        protected override string NewLineStr => "\n";
+
+        public override HttpResponseMessage DoSend()
+        {
+            var json = new
+            {
+                touser = _toUser,
+                toparty = _toParty,
+                totag = _toTag,
+                agentid = _agentId,
+                msgtype = "text",
+                text = new
+                {
+                    content = Msg
+                }
+            }.ToJson();
+
+            var content = new StringContent(json, Encoding.UTF8, "application/json");
+
+            var response = _httpClient.PostAsync(_apiUrl, content).GetAwaiter().GetResult();
+            return response;
+        }
+
+        private string GetAccessToken(string corpId, string secret)
+        {
+            var token = "";
+
+            try
+            {
+                var uri = new Uri($"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={corpId}&corpsecret={secret}");
+                var response = _httpClient.GetAsync(uri).GetAwaiter().GetResult();
+                var content = response.Content.ReadAsStringAsync()
+                            .GetAwaiter().GetResult();
+
+                var re = content.ToObject<WorkWeiXinAppTokenResponse>();
+
+                if (re.errcode == 0) return re.access_token;
+            }
+            catch (Exception)
+            {
+                //ignore
+            }
+
+            return token;
+        }
+    }
+}
diff --git a/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/WorkWeiXinAppBatchedSink.cs b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/WorkWeiXinAppBatchedSink.cs
new file mode 100644
index 000000000..f837d4f2f
--- /dev/null
+++ b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/WorkWeiXinAppBatchedSink.cs
@@ -0,0 +1,59 @@
+using System;
+using Ray.Serilog.Sinks.Batched;
+using Serilog.Events;
+
+namespace Ray.Serilog.Sinks.WorkWeiXinAppBatched
+{
+    public class WorkWeiXinAppBatchedSink : BatchedSink
+    {
+        private readonly string _corpId;
+        private readonly string _agentId;
+        private readonly string _secret;
+
+        private readonly string _toUser;
+        private readonly string _toParty;
+        private readonly string _toTag;
+
+        public WorkWeiXinAppBatchedSink(
+            string corpId,
+            string agentId,
+            string secret,
+            string toUser,
+            string toParty,
+            string toTag,
+            Predicate<LogEvent> predicate,
+            bool sendBatchesAsOneMessages,
+            string outputTemplate,
+            IFormatProvider formatProvider,
+            LogEventLevel minimumLogEventLevel
+            )
+            : base(predicate, sendBatchesAsOneMessages, outputTemplate, formatProvider, minimumLogEventLevel)
+        {
+            _corpId = corpId;
+            _agentId = agentId;
+            _secret = secret;
+            _toUser = toUser;
+            _toParty = toParty;
+            _toTag = toTag;
+        }
+
+        public override void Emit(LogEvent logEvent)
+        {
+            if (_corpId.IsNullOrEmpty()||_secret.IsNullOrEmpty()||_agentId.IsNullOrEmpty()) return;
+            base.Emit(logEvent);
+        }
+
+        protected override PushService PushService => new WorkWeiXinAppApiClient(
+            _corpId,
+            _agentId,
+            _secret,
+            _toUser,
+            _toParty,
+            _toTag);
+
+        public override void Dispose()
+        {
+            //todo
+        }
+    }
+}
diff --git a/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/WorkWeiXinAppConfigurationExtensions.cs b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/WorkWeiXinAppConfigurationExtensions.cs
new file mode 100644
index 000000000..f2566e14d
--- /dev/null
+++ b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/WorkWeiXinAppConfigurationExtensions.cs
@@ -0,0 +1,50 @@
+using System;
+using Ray.Serilog.Sinks.Batched;
+using Serilog;
+using Serilog.Configuration;
+using Serilog.Events;
+
+namespace Ray.Serilog.Sinks.WorkWeiXinAppBatched
+{
+    public static class WorkWeiXinAppConfigurationExtensions
+    {
+        public static LoggerConfiguration WorkWeiXinAppBatched(
+            this LoggerSinkConfiguration loggerSinkConfiguration,
+            string corpId,
+            string agentId,
+            string secret,
+            string toUser,
+            string toParty,
+            string toTag,
+            string containsTrigger = Constants.DefaultContainsTrigger,
+            bool sendBatchesAsOneMessages = true,
+            string outputTemplate = Constants.DefaultOutputTemplate,
+            IFormatProvider formatProvider = null,
+            LogEventLevel restrictedToMinimumLevel = LogEventLevel.Verbose
+        )
+        {
+            if (loggerSinkConfiguration == null)
+                throw new ArgumentNullException(nameof(loggerSinkConfiguration));
+            if (outputTemplate == null)
+                throw new ArgumentNullException(nameof(outputTemplate));
+
+            if (containsTrigger.IsNullOrEmpty()) containsTrigger = Constants.DefaultContainsTrigger;
+            Predicate<LogEvent> predicate = x => x.MessageTemplate.Text.Contains(containsTrigger);
+
+            return loggerSinkConfiguration.Sink(
+                new WorkWeiXinAppBatchedSink(
+                    corpId,
+                    agentId,
+                    secret,
+                    toUser,
+                    toParty,
+                    toTag,
+                    predicate,
+                    sendBatchesAsOneMessages,
+                    outputTemplate,
+                    formatProvider,
+                    restrictedToMinimumLevel),
+                restrictedToMinimumLevel);
+        }
+    }
+}
diff --git a/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/WorkWeiXinAppTokenResponse.cs b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/WorkWeiXinAppTokenResponse.cs
new file mode 100644
index 000000000..382421e70
--- /dev/null
+++ b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/WorkWeiXinAppTokenResponse.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Ray.Serilog.Sinks.WorkWeiXinAppBatched
+{
+    public class WorkWeiXinAppTokenResponse
+    {
+        public int errcode { get; set; }
+
+        public string errmsg { get; set; }
+
+        public string access_token { get; set; }
+
+        public int expires_in { get; set; }
+    }
+}
diff --git a/test/BiliAgentTest/BiliAgentTest.csproj b/test/BiliAgentTest/BiliAgentTest.csproj
index e0afedba2..0a8272606 100644
--- a/test/BiliAgentTest/BiliAgentTest.csproj
+++ b/test/BiliAgentTest/BiliAgentTest.csproj
@@ -8,13 +8,13 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
     <PackageReference Include="xunit" Version="2.4.1" />
     <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
       <PrivateAssets>all</PrivateAssets>
     </PackageReference>
-    <PackageReference Include="coverlet.collector" Version="3.1.0">
+    <PackageReference Include="coverlet.collector" Version="3.1.2">
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
       <PrivateAssets>all</PrivateAssets>
     </PackageReference>
diff --git a/test/ConfigTest/ConfigTest.csproj b/test/ConfigTest/ConfigTest.csproj
index 9015e6ada..59cead1c9 100644
--- a/test/ConfigTest/ConfigTest.csproj
+++ b/test/ConfigTest/ConfigTest.csproj
@@ -6,13 +6,13 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" />
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
     <PackageReference Include="xunit" Version="2.4.1" />
     <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>
-    <PackageReference Include="coverlet.collector" Version="3.0.3">
+    <PackageReference Include="coverlet.collector" Version="3.1.2">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>
diff --git a/test/LogTest/LogTest.csproj b/test/LogTest/LogTest.csproj
index 97f27ee26..777d17bef 100644
--- a/test/LogTest/LogTest.csproj
+++ b/test/LogTest/LogTest.csproj
@@ -7,13 +7,13 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" />
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
     <PackageReference Include="xunit" Version="2.4.1" />
     <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>
-    <PackageReference Include="coverlet.collector" Version="3.0.3">
+    <PackageReference Include="coverlet.collector" Version="3.1.2">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>
diff --git a/test/LogTest/TestWorkWeiXinApp.cs b/test/LogTest/TestWorkWeiXinApp.cs
new file mode 100644
index 000000000..b78ab0426
--- /dev/null
+++ b/test/LogTest/TestWorkWeiXinApp.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Diagnostics;
+using Ray.BiliBiliTool.Console;
+using Ray.BiliBiliTool.Infrastructure;
+using Ray.Serilog.Sinks.WorkWeiXinAppBatched;
+using Xunit;
+
+namespace LogTest
+{
+    public class TestWorkWeiXinApp
+    {
+        private string _agentId;
+        private string _secret;
+        private string _corpId;
+        private string _toUser;
+
+        public TestWorkWeiXinApp()
+        {
+            Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development");
+            Program.CreateHost(new string[] { });
+
+            _agentId = Global.ConfigurationRoot["Serilog:WriteTo:11:Args:agentId"];
+            _secret = Global.ConfigurationRoot["Serilog:WriteTo:11:Args:secret"];
+            _corpId = Global.ConfigurationRoot["Serilog:WriteTo:11:Args:corpId"];
+
+            _toUser = Global.ConfigurationRoot["Serilog:WriteTo:11:Args:toUser"];
+        }
+
+        [Fact]
+        public void Test()
+        {
+            var client = new WorkWeiXinAppApiClient(_corpId,_agentId, _secret, _toUser);
+
+            var msg = LogConstants.Msg2;
+
+            var result = client.PushMessage(msg);
+            Debug.WriteLine(result.Content.ReadAsStringAsync().Result);
+
+            Assert.True(result.StatusCode == System.Net.HttpStatusCode.OK);
+        }
+    }
+}

From 56663c96561aa39cbea6e5d4836421a0c84c0ad9 Mon Sep 17 00:00:00 2001
From: Ray <zai7lou@outlook.com>
Date: Sun, 3 Apr 2022 20:45:06 +0800
Subject: [PATCH 06/10] bugfix: fix serilog missing using error

---
 Dockerfile                                         |  2 ++
 Ray.BiliBiliTool.sln                               | 14 +++++++-------
 .../Ray.BiliBiliTool.Console.csproj                |  2 +-
 src/Ray.BiliBiliTool.Console/appsettings.json      |  4 +++-
 .../MicrosoftTeamsApiClient.cs                     |  6 ++----
 .../MicrosoftTeamsBatchedSink.cs                   |  5 ++---
 .../MicrosoftTeamsConfigurationExtensions.cs       |  5 ++---
 ...Ray.Serilog.Sinks.MicrosoftTeamsBatched.csproj} |  0
 test/LogTest/LogTest.csproj                        |  2 +-
 test/LogTest/TestMicrosoftTeams.cs                 |  2 +-
 10 files changed, 21 insertions(+), 21 deletions(-)
 rename src/Ray.Serilog.Sinks/{Ray.Serilog.Sinks.MicrosoftTeams => Ray.Serilog.Sinks.MicrosoftTeamsBatched}/MicrosoftTeamsApiClient.cs (90%)
 rename src/Ray.Serilog.Sinks/{Ray.Serilog.Sinks.MicrosoftTeams => Ray.Serilog.Sinks.MicrosoftTeamsBatched}/MicrosoftTeamsBatchedSink.cs (91%)
 rename src/Ray.Serilog.Sinks/{Ray.Serilog.Sinks.MicrosoftTeams => Ray.Serilog.Sinks.MicrosoftTeamsBatched}/MicrosoftTeamsConfigurationExtensions.cs (94%)
 rename src/Ray.Serilog.Sinks/{Ray.Serilog.Sinks.MicrosoftTeams/Ray.Serilog.Sinks.MicrosoftTeams.csproj => Ray.Serilog.Sinks.MicrosoftTeamsBatched/Ray.Serilog.Sinks.MicrosoftTeamsBatched.csproj} (100%)

diff --git a/Dockerfile b/Dockerfile
index 2bd2d2c71..11daee9d5 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -20,6 +20,8 @@ COPY ["src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.OtherApiBatched/Ray.Serilog.Sinks
 COPY ["src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.DingTalkBatched/Ray.Serilog.Sinks.DingTalkBatched.csproj", "src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.DingTalkBatched/"]
 COPY ["src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.PushPlusBatched/Ray.Serilog.Sinks.PushPlusBatched.csproj", "src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.PushPlusBatched/"]
 COPY ["src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.ServerChanBatched/Ray.Serilog.Sinks.ServerChanBatched.csproj", "src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.ServerChanBatched/"]
+COPY ["src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeamsBatched/Ray.Serilog.Sinks.MicrosoftTeamsBatched.csproj", "src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeamsBatched/"]
+COPY ["src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/Ray.Serilog.Sinks.WorkWeiXinAppBatched.csproj", "src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/"]
 RUN dotnet restore "src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj"
 COPY . .
 WORKDIR "/code/src/Ray.BiliBiliTool.Console"
diff --git a/Ray.BiliBiliTool.sln b/Ray.BiliBiliTool.sln
index 9fdbba7aa..203bb3b25 100644
--- a/Ray.BiliBiliTool.sln
+++ b/Ray.BiliBiliTool.sln
@@ -148,10 +148,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{75A9CC5C
 		docker\build\buildImage_arm64.cmd = docker\build\buildImage_arm64.cmd
 	EndProjectSection
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ray.Serilog.Sinks.MicrosoftTeams", "src\Ray.Serilog.Sinks\Ray.Serilog.Sinks.MicrosoftTeams\Ray.Serilog.Sinks.MicrosoftTeams.csproj", "{F249A822-EFD3-4F0A-9C10-95A96676D61A}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ray.Serilog.Sinks.WorkWeiXinAppBatched", "src\Ray.Serilog.Sinks\Ray.Serilog.Sinks.WorkWeiXinAppBatched\Ray.Serilog.Sinks.WorkWeiXinAppBatched.csproj", "{099C4E10-1114-495C-A664-63A15E77B31A}"
 EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ray.Serilog.Sinks.MicrosoftTeamsBatched", "src\Ray.Serilog.Sinks\Ray.Serilog.Sinks.MicrosoftTeamsBatched\Ray.Serilog.Sinks.MicrosoftTeamsBatched.csproj", "{FB9A43DE-00F0-42C4-BF92-AF61D752CCA2}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -230,14 +230,14 @@ Global
 		{F6B8ED3A-5428-4D26-8172-8B41FBF0C4CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{F6B8ED3A-5428-4D26-8172-8B41FBF0C4CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F6B8ED3A-5428-4D26-8172-8B41FBF0C4CF}.Release|Any CPU.Build.0 = Release|Any CPU
-		{F249A822-EFD3-4F0A-9C10-95A96676D61A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{F249A822-EFD3-4F0A-9C10-95A96676D61A}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{F249A822-EFD3-4F0A-9C10-95A96676D61A}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{F249A822-EFD3-4F0A-9C10-95A96676D61A}.Release|Any CPU.Build.0 = Release|Any CPU
 		{099C4E10-1114-495C-A664-63A15E77B31A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{099C4E10-1114-495C-A664-63A15E77B31A}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{099C4E10-1114-495C-A664-63A15E77B31A}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{099C4E10-1114-495C-A664-63A15E77B31A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{FB9A43DE-00F0-42C4-BF92-AF61D752CCA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{FB9A43DE-00F0-42C4-BF92-AF61D752CCA2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{FB9A43DE-00F0-42C4-BF92-AF61D752CCA2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{FB9A43DE-00F0-42C4-BF92-AF61D752CCA2}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -275,8 +275,8 @@ Global
 		{830361B7-BCC1-4853-879A-761B0FD86826} = {73DD457B-E06E-45ED-A6BA-7E3C02F8BDF1}
 		{F6B8ED3A-5428-4D26-8172-8B41FBF0C4CF} = {E9BDDCBE-A57D-4E3B-8252-708088386ADF}
 		{75A9CC5C-DF92-4D72-A14C-625AA902855B} = {A93210FD-27B6-40E4-B08D-391F96CA2754}
-		{F249A822-EFD3-4F0A-9C10-95A96676D61A} = {4BAFC980-7A73-45C3-9460-8B8CCB87939B}
 		{099C4E10-1114-495C-A664-63A15E77B31A} = {4BAFC980-7A73-45C3-9460-8B8CCB87939B}
+		{FB9A43DE-00F0-42C4-BF92-AF61D752CCA2} = {4BAFC980-7A73-45C3-9460-8B8CCB87939B}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {197319DA-1148-4A99-847C-8B270B6A29AB}
diff --git a/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj b/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj
index dd571528c..dae6aa66d 100644
--- a/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj
+++ b/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj
@@ -76,7 +76,7 @@
     <ProjectReference Include="..\Ray.Serilog.Sinks\Ray.Serilog.Sinks.Batched\Ray.Serilog.Sinks.Batched.csproj" />
     <ProjectReference Include="..\Ray.Serilog.Sinks\Ray.Serilog.Sinks.CoolPushBatched\Ray.Serilog.Sinks.CoolPushBatched.csproj" />
     <ProjectReference Include="..\Ray.Serilog.Sinks\Ray.Serilog.Sinks.DingTalkBatched\Ray.Serilog.Sinks.DingTalkBatched.csproj" />
-    <ProjectReference Include="..\Ray.Serilog.Sinks\Ray.Serilog.Sinks.MicrosoftTeams\Ray.Serilog.Sinks.MicrosoftTeams.csproj" />
+    <ProjectReference Include="..\Ray.Serilog.Sinks\Ray.Serilog.Sinks.MicrosoftTeamsBatched\Ray.Serilog.Sinks.MicrosoftTeamsBatched.csproj" />
     <ProjectReference Include="..\Ray.Serilog.Sinks\Ray.Serilog.Sinks.OtherApiBatched\Ray.Serilog.Sinks.OtherApiBatched.csproj" />
     <ProjectReference Include="..\Ray.Serilog.Sinks\Ray.Serilog.Sinks.PushPlusBatched\Ray.Serilog.Sinks.PushPlusBatched.csproj" />
     <ProjectReference Include="..\Ray.Serilog.Sinks\Ray.Serilog.Sinks.ServerChanBatched\Ray.Serilog.Sinks.ServerChanBatched.csproj" />
diff --git a/src/Ray.BiliBiliTool.Console/appsettings.json b/src/Ray.BiliBiliTool.Console/appsettings.json
index 59e8f3825..57ee4c803 100644
--- a/src/Ray.BiliBiliTool.Console/appsettings.json
+++ b/src/Ray.BiliBiliTool.Console/appsettings.json
@@ -61,7 +61,9 @@
       "Ray.Serilog.Sinks.ServerChanBatched",
       "Ray.Serilog.Sinks.CoolPushBatched",
       "Ray.Serilog.Sinks.OtherApiBatched",
-      "Ray.Serilog.Sinks.PushPlusBatched"
+      "Ray.Serilog.Sinks.PushPlusBatched",
+      "Ray.Serilog.Sinks.MicrosoftTeamsBatched",
+      "Ray.Serilog.Sinks.WorkWeiXinAppBatched"
     ],
     "MinimumLevel": {
       "Default": "Debug",
diff --git a/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeams/MicrosoftTeamsApiClient.cs b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeamsBatched/MicrosoftTeamsApiClient.cs
similarity index 90%
rename from src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeams/MicrosoftTeamsApiClient.cs
rename to src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeamsBatched/MicrosoftTeamsApiClient.cs
index 1865379c0..fec744259 100644
--- a/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeams/MicrosoftTeamsApiClient.cs
+++ b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeamsBatched/MicrosoftTeamsApiClient.cs
@@ -1,9 +1,7 @@
-using System;
-using System.Net.Http;
-using System.Text;
+using System.Text;
 using Ray.Serilog.Sinks.Batched;
 
-namespace Ray.Serilog.Sinks.MicrosoftTeams
+namespace Ray.Serilog.Sinks.MicrosoftTeamsBatched
 {
     public class MicrosoftTeamsApiClient : PushService
     {
diff --git a/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeams/MicrosoftTeamsBatchedSink.cs b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeamsBatched/MicrosoftTeamsBatchedSink.cs
similarity index 91%
rename from src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeams/MicrosoftTeamsBatchedSink.cs
rename to src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeamsBatched/MicrosoftTeamsBatchedSink.cs
index 1d7d00e67..f71ef6b7b 100644
--- a/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeams/MicrosoftTeamsBatchedSink.cs
+++ b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeamsBatched/MicrosoftTeamsBatchedSink.cs
@@ -1,8 +1,7 @@
-using System;
-using Ray.Serilog.Sinks.Batched;
+using Ray.Serilog.Sinks.Batched;
 using Serilog.Events;
 
-namespace Ray.Serilog.Sinks.MicrosoftTeams
+namespace Ray.Serilog.Sinks.MicrosoftTeamsBatched
 {
     public class MicrosoftTeamsBatchedSink : BatchedSink
     {
diff --git a/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeams/MicrosoftTeamsConfigurationExtensions.cs b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeamsBatched/MicrosoftTeamsConfigurationExtensions.cs
similarity index 94%
rename from src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeams/MicrosoftTeamsConfigurationExtensions.cs
rename to src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeamsBatched/MicrosoftTeamsConfigurationExtensions.cs
index e85fd6fcf..3eb8dde5a 100644
--- a/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeams/MicrosoftTeamsConfigurationExtensions.cs
+++ b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeamsBatched/MicrosoftTeamsConfigurationExtensions.cs
@@ -1,10 +1,9 @@
-using System;
-using Ray.Serilog.Sinks.Batched;
+using Ray.Serilog.Sinks.Batched;
 using Serilog;
 using Serilog.Configuration;
 using Serilog.Events;
 
-namespace Ray.Serilog.Sinks.MicrosoftTeams
+namespace Ray.Serilog.Sinks.MicrosoftTeamsBatched
 {
     public static class MicrosoftTeamsConfigurationExtensions
     {
diff --git a/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeams/Ray.Serilog.Sinks.MicrosoftTeams.csproj b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeamsBatched/Ray.Serilog.Sinks.MicrosoftTeamsBatched.csproj
similarity index 100%
rename from src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeams/Ray.Serilog.Sinks.MicrosoftTeams.csproj
rename to src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeamsBatched/Ray.Serilog.Sinks.MicrosoftTeamsBatched.csproj
diff --git a/test/LogTest/LogTest.csproj b/test/LogTest/LogTest.csproj
index 777d17bef..6c443a99b 100644
--- a/test/LogTest/LogTest.csproj
+++ b/test/LogTest/LogTest.csproj
@@ -21,7 +21,7 @@
 
   <ItemGroup>
     <ProjectReference Include="..\..\src\Ray.BiliBiliTool.Console\Ray.BiliBiliTool.Console.csproj" />
-    <ProjectReference Include="..\..\src\Ray.Serilog.Sinks\Ray.Serilog.Sinks.MicrosoftTeams\Ray.Serilog.Sinks.MicrosoftTeams.csproj" />
+    <ProjectReference Include="..\..\src\Ray.Serilog.Sinks\Ray.Serilog.Sinks.MicrosoftTeamsBatched\Ray.Serilog.Sinks.MicrosoftTeamsBatched.csproj" />
   </ItemGroup>
 
 </Project>
diff --git a/test/LogTest/TestMicrosoftTeams.cs b/test/LogTest/TestMicrosoftTeams.cs
index e5e2d131c..491098d7b 100644
--- a/test/LogTest/TestMicrosoftTeams.cs
+++ b/test/LogTest/TestMicrosoftTeams.cs
@@ -6,7 +6,7 @@
 using Ray.BiliBiliTool.Console;
 using Ray.BiliBiliTool.Infrastructure;
 using Ray.Serilog.Sinks.CoolPushBatched;
-using Ray.Serilog.Sinks.MicrosoftTeams;
+using Ray.Serilog.Sinks.MicrosoftTeamsBatched;
 using Ray.Serilog.Sinks.PushPlusBatched;
 using Ray.Serilog.Sinks.ServerChanBatched;
 using Xunit;

From c90d1a3bb5c88cdb9184b711bec696b8b10f71bc Mon Sep 17 00:00:00 2001
From: Ray <zai7lou@outlook.com>
Date: Sun, 3 Apr 2022 21:00:16 +0800
Subject: [PATCH 07/10] feat: [#32] update docs about work weixin app notify

---
 docs/configuration.md                         | 49 +++++++++++++++++++
 src/Ray.BiliBiliTool.Console/appsettings.json |  6 +--
 2 files changed, 52 insertions(+), 3 deletions(-)

diff --git a/docs/configuration.md b/docs/configuration.md
index e1be7ebe6..09e4559de 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -61,6 +61,10 @@
             - [3.6.8.4. PushPlus的Webhook](#3684-pushplus的webhook)
         - [3.6.9. Microsoft Teams](#369-microsoft-teams)
             - [3.6.9.1. Microsoft Teams的Webhook](#3691-microsoft-teams的webhook)
+        - [3.6.10. 企业微信应用推送](#3610-企业微信应用推送)
+            - [3.6.10.1. 企业微信应用推送的corpId](#36101-企业微信应用推送的corpid)
+            - [3.6.10.2. 企业微信应用推送的agentId](#36102-企业微信应用推送的agentid)
+            - [3.6.10.3. 企业微信应用推送的secret](#36103-企业微信应用推送的secret)
     - [3.7. 日志相关](#37-日志相关)
         - [3.7.1. Console日志输出等级](#371-console日志输出等级)
         - [3.7.2. Console日志输出样式](#372-console日志输出样式)
@@ -686,6 +690,51 @@ webhook的完整地址,在Teams的Channel中获取,详细获取方式请参
 | 命令行示范   |  |
 | GitHub Secrets  |  |
 
+<a id="markdown-3610-企业微信应用推送" name="3610-企业微信应用推送"></a>
+#### 3.6.10. 企业微信应用推送
+
+官网: https://developer.work.weixin.qq.com/tutorial/application-message
+
+当`corpId`、`agentId`、`secret`均不为空时,自动开启推送,否则关闭。
+
+`toUser`、`toParty`、`toTag`3个配置非必填,但不可同时为空,默认`toUser`为`@all`,向所有用户推送。
+
+<a id="markdown-36101-企业微信应用推送的corpid" name="36101-企业微信应用推送的corpid"></a>
+##### 3.6.10.1. 企业微信应用推送的corpId
+
+|   TITLE   | CONTENT   |
+| ---------- | -------------- |
+| 配置Key | `Serilog:WriteTo:11:Args:corpId` |
+| 值域   | 一串字符串 |
+| 默认值   | 空 |
+| 环境变量   | `Serilog__WriteTo__11__Args__corpId` |
+| 命令行示范   |  |
+| GitHub Secrets  |  |
+
+<a id="markdown-36102-企业微信应用推送的agentid" name="36102-企业微信应用推送的agentid"></a>
+##### 3.6.10.2. 企业微信应用推送的agentId
+
+|   TITLE   | CONTENT   |
+| ---------- | -------------- |
+| 配置Key | `Serilog:WriteTo:11:Args:agentId` |
+| 值域   | 一串字符串 |
+| 默认值   | 空 |
+| 环境变量   | `Serilog__WriteTo__11__Args__agentId` |
+| 命令行示范   |  |
+| GitHub Secrets  |  |
+
+<a id="markdown-36103-企业微信应用推送的secret" name="36103-企业微信应用推送的secret"></a>
+##### 3.6.10.3. 企业微信应用推送的secret
+
+|   TITLE   | CONTENT   |
+| ---------- | -------------- |
+| 配置Key | `Serilog:WriteTo:11:Args:secret` |
+| 值域   | 一串字符串 |
+| 默认值   | 空 |
+| 环境变量   | `Serilog__WriteTo__11__Args__secret` |
+| 命令行示范   |  |
+| GitHub Secrets  |  |
+
 
 <a id="markdown-37-日志相关" name="37-日志相关"></a>
 ### 3.7. 日志相关
diff --git a/src/Ray.BiliBiliTool.Console/appsettings.json b/src/Ray.BiliBiliTool.Console/appsettings.json
index 57ee4c803..e2c3bda2e 100644
--- a/src/Ray.BiliBiliTool.Console/appsettings.json
+++ b/src/Ray.BiliBiliTool.Console/appsettings.json
@@ -169,9 +169,9 @@
       {
         "Name": "WorkWeiXinAppBatched",
         "Args": {
-          "corpId": "",
-          "agentId": "",
-          "secret": "",
+          "corpId": "", //必填
+          "agentId": "", //必填
+          "secret": "", //必填
           "toUser": "@all",
           "toParty": "",
           "toTag": "",

From f4236f96f7e7c63bd932c996b609a2c2c2e64076 Mon Sep 17 00:00:00 2001
From: Ray <zai7lou@outlook.com>
Date: Sun, 3 Apr 2022 21:18:46 +0800
Subject: [PATCH 08/10] feat: update some log formate

---
 CHANGELOG.md                                               | 1 +
 src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs  | 4 ++--
 src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs | 3 ++-
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index baa6d1f5f..b813b341e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -33,3 +33,4 @@
 - 【#62】codeql-analysis.yml可以指定检查的文件类型
 - 【#61】publish-image.yml手动打镜像时支持指定是否打latest的tag
 - 【#32】新增企业微信的应用推送,实现微信接受推送消息
+- 优化日志格式
diff --git a/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs b/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs
index 1b46d75af..bd3dab1da 100644
--- a/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs
+++ b/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs
@@ -60,7 +60,7 @@ public Task StartAsync(CancellationToken cancellationToken)
                 for (int i = 0; i < _cookieStrFactory.Count; i++)
                 {
                     _cookieStrFactory.CurrentNum = i + 1;
-                    _logger.LogInformation("账号 {num} :" + Environment.NewLine, _cookieStrFactory.CurrentNum);
+                    _logger.LogInformation("========= 账号 {num} =========" + Environment.NewLine, _cookieStrFactory.CurrentNum);
 
                     try
                     {
@@ -155,7 +155,7 @@ private void DoTasks(string[] tasks)
         private void LogAppInfo()
         {
             _logger.LogInformation(
-                "{newLine}---------------------------------------{newLine} RayBiliBiliToolPro-v{version} in {env} env.{newLine}开源 by {url}",
+                "{newLine}========================{newLine} v{version} in {env} env.{newLine}开源 by {url}",
                 Environment.NewLine + Environment.NewLine,
                 Environment.NewLine + Environment.NewLine,
                 typeof(Program).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion,
diff --git a/src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs b/src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs
index 05ecc6e2c..6f34ee5ce 100644
--- a/src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs
+++ b/src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs
@@ -72,7 +72,8 @@ public UserInfo LoginByCookie()
             }
             else
             {
-                _logger.LogInformation("【当前经验】{0} (您已是 Lv6 的大佬了,无敌是多么寂寞~)", useInfo.Level_info.Current_exp);
+                _logger.LogInformation("【当前经验】{0}", useInfo.Level_info.Current_exp);
+                _logger.LogInformation("您已是 Lv6 的大佬了,无敌是多么寂寞~");
             }
 
             return useInfo;

From f008cb56c33807039459485689364f8c3a83da93 Mon Sep 17 00:00:00 2001
From: Ray <zai7lou@outlook.com>
Date: Sun, 3 Apr 2022 21:21:50 +0800
Subject: [PATCH 09/10] chore: update docs

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 0dcd8a20d..a79e1e0af 100644
--- a/README.md
+++ b/README.md
@@ -189,7 +189,7 @@ Ray.BiliBiliTool.Console
 
 ![微信推送图示](docs/imgs/wechat-push.png)
 
-目前默认支持**PushPlus推送、企业微信推送、钉钉推送、Telegram推送、Server酱推送和酷推QQ推送**(以上顺序即为个人推荐的排序),如果需要推送到其他端,也可以配置为任意的可以接受消息的Api地址,关于如何配置推送请详见下面的**个性化自定义配置**章节。
+目前默认支持**PushPlus推送、企业微信应用推送、企业微信推送、钉钉推送、Microsoft Teams推送、Telegram推送、Server酱推送和酷推QQ推送**(以上顺序即为个人推荐的排序),如果需要推送到其他端,也可以配置为任意的可以接受消息的Api地址,关于如何配置推送请详见下面的**个性化自定义配置**章节。
 
 ## 2. 功能任务说明
 这里的**任务**是指一组功能的集合,是工具每次运行的最小单位。工具启动后会根据我们输入的任务编码,运行相应的任务,如:

From bc89ec8a70dc59329edc61e52baf28f1399e12a4 Mon Sep 17 00:00:00 2001
From: Ray <zai7lou@outlook.com>
Date: Sun, 3 Apr 2022 21:34:12 +0800
Subject: [PATCH 10/10] chore: fix nullable problem

---
 src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs       | 2 +-
 .../Ray.Serilog.Sinks.MicrosoftTeamsBatched.csproj              | 1 -
 .../Ray.Serilog.Sinks.WorkWeiXinAppBatched.csproj               | 1 -
 3 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs b/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs
index bd3dab1da..0ae6740a6 100644
--- a/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs
+++ b/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs
@@ -161,7 +161,7 @@ private void LogAppInfo()
                 typeof(Program).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion,
                 Global.HostingEnvironment.EnvironmentName,
                 Environment.NewLine,
-                Constants.SourceCodeUrl
+                Constants.SourceCodeUrl + Environment.NewLine
                 );
             //_logger.LogInformation("【当前IP】{ip} ", IpHelper.GetIp());
         }
diff --git a/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeamsBatched/Ray.Serilog.Sinks.MicrosoftTeamsBatched.csproj b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeamsBatched/Ray.Serilog.Sinks.MicrosoftTeamsBatched.csproj
index 55eb04647..8c31e019d 100644
--- a/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeamsBatched/Ray.Serilog.Sinks.MicrosoftTeamsBatched.csproj
+++ b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.MicrosoftTeamsBatched/Ray.Serilog.Sinks.MicrosoftTeamsBatched.csproj
@@ -3,7 +3,6 @@
   <PropertyGroup>
     <TargetFramework>net6.0</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>
-    <Nullable>enable</Nullable>
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/Ray.Serilog.Sinks.WorkWeiXinAppBatched.csproj b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/Ray.Serilog.Sinks.WorkWeiXinAppBatched.csproj
index 23dca6dc7..03f0eaef1 100644
--- a/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/Ray.Serilog.Sinks.WorkWeiXinAppBatched.csproj
+++ b/src/Ray.Serilog.Sinks/Ray.Serilog.Sinks.WorkWeiXinAppBatched/Ray.Serilog.Sinks.WorkWeiXinAppBatched.csproj
@@ -3,7 +3,6 @@
   <PropertyGroup>
     <TargetFramework>net6.0</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>
-    <Nullable>enable</Nullable>
   </PropertyGroup>
 
   <ItemGroup>