refactor: ♻️ 框架&业务代码分离 (#185)

Co-authored-by: tk <fiyne1a@dingtalk.com>
This commit is contained in:
2024-11-04 12:06:50 +08:00
committed by GitHub
parent 072cc1e491
commit 13ba536df2
404 changed files with 4579 additions and 1283 deletions

1
.github/workflows/README.md vendored Normal file
View File

@ -0,0 +1 @@
github workflows

1
.gitignore vendored
View File

@ -397,6 +397,7 @@ FodyWeavers.xsd
# JetBrains Rider # JetBrains Rider
*.sln.iml *.sln.iml
.idea/ .idea/
!src/backend/CloudCode.DataGrip/.idea
# User Define # User Define
dist/ dist/

6
.gitmodules vendored
View File

@ -1,6 +1,6 @@
[submodule "refs/Furion"] [submodule "refs/Gurion"]
path = refs/Furion path = refs/Gurion
url = https://github.com/nsnail/Furion.git url = https://github.com/nsnail/Gurion.git
[submodule "refs/ns-ext"] [submodule "refs/ns-ext"]
path = refs/ns-ext path = refs/ns-ext
url = https://github.com/nsnail/ns-ext.git url = https://github.com/nsnail/ns-ext.git

View File

@ -1,6 +1,7 @@
<!-- 注意此文件名大小写不可变更 --> <!-- 注意此文件名大小写不可变更 -->
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<DefineConstants>DBTYPE_SQLITE</DefineConstants>
<SolutionDir>$(MSBuildThisFileDirectory)</SolutionDir> <SolutionDir>$(MSBuildThisFileDirectory)</SolutionDir>
</PropertyGroup> </PropertyGroup>
<Import Project="$(SolutionDir)/build/minver.targets" /> <Import Project="$(SolutionDir)/build/minver.targets" />

View File

@ -31,6 +31,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{BB0B
1.git.pull.request.ps1 = scripts/1.git.pull.request.ps1 1.git.pull.request.ps1 = scripts/1.git.pull.request.ps1
2.git.release.ps1 = scripts/2.git.release.ps1 2.git.release.ps1 = scripts/2.git.release.ps1
3.git.recreate.branch.ps1 = scripts/3.git.recreate.branch.ps1 3.git.recreate.branch.ps1 = scripts/3.git.recreate.branch.ps1
4.git.del.obsolete.tags.ps1 = scripts/4.git.del.obsolete.tags.ps1
clean.ln.csx = scripts/clean.ln.csx clean.ln.csx = scripts/clean.ln.csx
code.clean.csx = scripts/code.clean.csx code.clean.csx = scripts/code.clean.csx
code.clean.ps1 = scripts/code.clean.ps1 code.clean.ps1 = scripts/code.clean.ps1
@ -39,13 +40,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{BB0B
gen.id.linq = scripts/gen.id.linq gen.id.linq = scripts/gen.id.linq
gen.ln.cmd = scripts/gen.ln.cmd gen.ln.cmd = scripts/gen.ln.cmd
gen.resx.tt = scripts/gen.resx.tt gen.resx.tt = scripts/gen.resx.tt
git.del.obsolete.tags.ps1 = scripts/git.del.obsolete.tags.ps1
image.optimize.csx = scripts/image.optimize.csx image.optimize.csx = scripts/image.optimize.csx
install.as.tpl.ps1 = scripts/install.as.tpl.ps1 install.as.tpl.ps1 = scripts/install.as.tpl.ps1
rename.csx = scripts/rename.csx rename.csx = scripts/rename.csx
resharper.full.ps1 = scripts/resharper.full.ps1 resharper.full.ps1 = scripts/resharper.full.ps1
switcher.freesql.json = scripts/switcher.freesql.json switcher.freesql.json = scripts/switcher.freesql.json
switcher.furion.json = scripts/switcher.furion.json switcher.gurion.json = scripts/switcher.gurion.json
switcher.nsext.json = scripts/switcher.nsext.json switcher.nsext.json = scripts/switcher.nsext.json
switcher.ps1 = scripts/switcher.ps1 switcher.ps1 = scripts/switcher.ps1
sync.sln.files.csx = scripts/sync.sln.files.csx sync.sln.files.csx = scripts/sync.sln.files.csx
@ -57,6 +57,7 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{3C6F049E-3EE8-4D66-9AFF-E8A369032487}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{3C6F049E-3EE8-4D66-9AFF-E8A369032487}"
ProjectSection(SolutionItems) = preProject ProjectSection(SolutionItems) = preProject
nightly-build.yml = .github/workflows/nightly-build.yml nightly-build.yml = .github/workflows/nightly-build.yml
README.md = .github/workflows/README.md
release.yml = .github/workflows/release.yml release.yml = .github/workflows/release.yml
EndProjectSection EndProjectSection
EndProject EndProject
@ -99,10 +100,25 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "01.frameworks", "01.framewo
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "04.tests", "04.tests", "{89260294-80FC-49F1-8D73-AECD39AFF2B7}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "04.tests", "04.tests", "{89260294-80FC-49F1-8D73-AECD39AFF2B7}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.AdmServer.Tests", "src\backend\NetAdmin.AdmServer.Tests\NetAdmin.AdmServer.Tests.csproj", "{C7F27698-DA05-4ACD-B0D7-4791B3972002}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "05.tools", "05.tools", "{79409163-5006-405D-AC96-406FA0AD77B7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "src\backend\UnitTests\UnitTests.csproj", "{C7F27698-DA05-4ACD-B0D7-4791B3972002}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Tests", "src\backend\NetAdmin.Tests\NetAdmin.Tests.csproj", "{00604162-C444-478B-B773-3AB23C856CA7}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Tests", "src\backend\NetAdmin.Tests\NetAdmin.Tests.csproj", "{00604162-C444-478B-B773-3AB23C856CA7}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{E80A1018-C354-4A26-9029-8847BB9DA864}"
ProjectSection(SolutionItems) = preProject
README.md = docker/README.md
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Domain", "src\backend\NetAdmin.SysComponent.Domain\NetAdmin.SysComponent.Domain.csproj", "{51D6E603-0749-4A11-A78C-9E5BB127E03A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.AdmServer.Domain", "src\backend\NetAdmin.AdmServer.Domain\NetAdmin.AdmServer.Domain.csproj", "{932520DF-D312-415A-A128-1117F8221D68}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.AdmServer.Infrastructure", "src\backend\NetAdmin.AdmServer.Infrastructure\NetAdmin.AdmServer.Infrastructure.csproj", "{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Infrastructure", "src\backend\NetAdmin.SysComponent.Infrastructure\NetAdmin.SysComponent.Infrastructure.csproj", "{48EE6FC4-B64A-40D3-B889-36837E067880}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -164,6 +180,22 @@ Global
{00604162-C444-478B-B773-3AB23C856CA7}.Debug|Any CPU.Build.0 = Debug|Any CPU {00604162-C444-478B-B773-3AB23C856CA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{00604162-C444-478B-B773-3AB23C856CA7}.Release|Any CPU.ActiveCfg = Release|Any CPU {00604162-C444-478B-B773-3AB23C856CA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{00604162-C444-478B-B773-3AB23C856CA7}.Release|Any CPU.Build.0 = Release|Any CPU {00604162-C444-478B-B773-3AB23C856CA7}.Release|Any CPU.Build.0 = Release|Any CPU
{51D6E603-0749-4A11-A78C-9E5BB127E03A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{51D6E603-0749-4A11-A78C-9E5BB127E03A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{51D6E603-0749-4A11-A78C-9E5BB127E03A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{51D6E603-0749-4A11-A78C-9E5BB127E03A}.Release|Any CPU.Build.0 = Release|Any CPU
{932520DF-D312-415A-A128-1117F8221D68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{932520DF-D312-415A-A128-1117F8221D68}.Debug|Any CPU.Build.0 = Debug|Any CPU
{932520DF-D312-415A-A128-1117F8221D68}.Release|Any CPU.ActiveCfg = Release|Any CPU
{932520DF-D312-415A-A128-1117F8221D68}.Release|Any CPU.Build.0 = Release|Any CPU
{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}.Release|Any CPU.Build.0 = Release|Any CPU
{48EE6FC4-B64A-40D3-B889-36837E067880}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{48EE6FC4-B64A-40D3-B889-36837E067880}.Debug|Any CPU.Build.0 = Debug|Any CPU
{48EE6FC4-B64A-40D3-B889-36837E067880}.Release|Any CPU.ActiveCfg = Release|Any CPU
{48EE6FC4-B64A-40D3-B889-36837E067880}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(NestedProjects) = preSolution GlobalSection(NestedProjects) = preSolution
{4DAF9366-855F-46BB-AE4C-660C92FA0697} = {C84EB5A0-37AD-4B17-A51E-E36888C4441E} {4DAF9366-855F-46BB-AE4C-660C92FA0697} = {C84EB5A0-37AD-4B17-A51E-E36888C4441E}
@ -180,10 +212,15 @@ Global
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86} {CE895E44-EEC3-4ECE-A56A-8A82E7D863E3} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{89260294-80FC-49F1-8D73-AECD39AFF2B7} = {4DAF9366-855F-46BB-AE4C-660C92FA0697} {89260294-80FC-49F1-8D73-AECD39AFF2B7} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{C7F27698-DA05-4ACD-B0D7-4791B3972002} = {89260294-80FC-49F1-8D73-AECD39AFF2B7} {C7F27698-DA05-4ACD-B0D7-4791B3972002} = {89260294-80FC-49F1-8D73-AECD39AFF2B7}
{3C6F049E-3EE8-4D66-9AFF-E8A369032487} = {1129FE25-466B-4F4F-85FC-3752664245E1}
{00604162-C444-478B-B773-3AB23C856CA7} = {D9C3EF66-2757-473D-A26B-54FD08DA203F} {00604162-C444-478B-B773-3AB23C856CA7} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{34650E82-D257-46DA-BD6B-DE307113347B} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2} {34650E82-D257-46DA-BD6B-DE307113347B} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2} {19872A4C-3C9A-4C62-A33B-74F5B8D6F77C} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2} {C2CC1596-3BEE-43EA-A9BE-4EDE5716296C} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
{79409163-5006-405D-AC96-406FA0AD77B7} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{51D6E603-0749-4A11-A78C-9E5BB127E03A} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
{932520DF-D312-415A-A128-1117F8221D68} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{48EE6FC4-B64A-40D3-B889-36837E067880} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
{3C6F049E-3EE8-4D66-9AFF-E8A369032487} = {1129FE25-466B-4F4F-85FC-3752664245E1}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

View File

@ -27,6 +27,256 @@
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_ACCESSOR_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue">NEVER</s:String> <s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_ACCESSOR_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue">NEVER</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_FIELD_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue">NEVER</s:String> <s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_FIELD_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue">NEVER</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_RECORD_FIELD_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue">NEVER</s:String> <s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_RECORD_FIELD_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue">NEVER</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=AD/@EntryIndexedValue">AD</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=AE/@EntryIndexedValue">AE</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=AF/@EntryIndexedValue">AF</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=AG/@EntryIndexedValue">AG</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=AI/@EntryIndexedValue">AI</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=AL/@EntryIndexedValue">AL</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=AM/@EntryIndexedValue">AM</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=AO/@EntryIndexedValue">AO</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=AQ/@EntryIndexedValue">AQ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=AR/@EntryIndexedValue">AR</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=AS/@EntryIndexedValue">AS</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=AT/@EntryIndexedValue">AT</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=AU/@EntryIndexedValue">AU</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=AW/@EntryIndexedValue">AW</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=AX/@EntryIndexedValue">AX</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=AZ/@EntryIndexedValue">AZ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BA/@EntryIndexedValue">BA</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BB/@EntryIndexedValue">BB</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BD/@EntryIndexedValue">BD</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BE/@EntryIndexedValue">BE</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BF/@EntryIndexedValue">BF</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BG/@EntryIndexedValue">BG</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BH/@EntryIndexedValue">BH</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BI/@EntryIndexedValue">BI</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BJ/@EntryIndexedValue">BJ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BL/@EntryIndexedValue">BL</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BM/@EntryIndexedValue">BM</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BN/@EntryIndexedValue">BN</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BO/@EntryIndexedValue">BO</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BQ/@EntryIndexedValue">BQ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BR/@EntryIndexedValue">BR</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BS/@EntryIndexedValue">BS</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BT/@EntryIndexedValue">BT</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BV/@EntryIndexedValue">BV</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BW/@EntryIndexedValue">BW</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BY/@EntryIndexedValue">BY</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=BZ/@EntryIndexedValue">BZ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CA/@EntryIndexedValue">CA</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CC/@EntryIndexedValue">CC</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CD/@EntryIndexedValue">CD</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CF/@EntryIndexedValue">CF</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CG/@EntryIndexedValue">CG</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CH/@EntryIndexedValue">CH</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CI/@EntryIndexedValue">CI</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CK/@EntryIndexedValue">CK</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CL/@EntryIndexedValue">CL</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CM/@EntryIndexedValue">CM</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CN/@EntryIndexedValue">CN</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CO/@EntryIndexedValue">CO</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CR/@EntryIndexedValue">CR</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CU/@EntryIndexedValue">CU</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CV/@EntryIndexedValue">CV</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CW/@EntryIndexedValue">CW</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CX/@EntryIndexedValue">CX</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CY/@EntryIndexedValue">CY</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CZ/@EntryIndexedValue">CZ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=DE/@EntryIndexedValue">DE</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=DJ/@EntryIndexedValue">DJ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=DK/@EntryIndexedValue">DK</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=DM/@EntryIndexedValue">DM</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=DO/@EntryIndexedValue">DO</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=DZ/@EntryIndexedValue">DZ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=EC/@EntryIndexedValue">EC</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=EE/@EntryIndexedValue">EE</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=EG/@EntryIndexedValue">EG</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=EH/@EntryIndexedValue">EH</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=ER/@EntryIndexedValue">ER</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=ES/@EntryIndexedValue">ES</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=ET/@EntryIndexedValue">ET</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=FI/@EntryIndexedValue">FI</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=FJ/@EntryIndexedValue">FJ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=FK/@EntryIndexedValue">FK</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=FM/@EntryIndexedValue">FM</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=FO/@EntryIndexedValue">FO</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=FR/@EntryIndexedValue">FR</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GA/@EntryIndexedValue">GA</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GB/@EntryIndexedValue">GB</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GD/@EntryIndexedValue">GD</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GE/@EntryIndexedValue">GE</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GF/@EntryIndexedValue">GF</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GG/@EntryIndexedValue">GG</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GH/@EntryIndexedValue">GH</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GI/@EntryIndexedValue">GI</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GL/@EntryIndexedValue">GL</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GM/@EntryIndexedValue">GM</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GN/@EntryIndexedValue">GN</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GP/@EntryIndexedValue">GP</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GQ/@EntryIndexedValue">GQ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GR/@EntryIndexedValue">GR</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GS/@EntryIndexedValue">GS</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GT/@EntryIndexedValue">GT</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GU/@EntryIndexedValue">GU</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GW/@EntryIndexedValue">GW</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=GY/@EntryIndexedValue">GY</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=HK/@EntryIndexedValue">HK</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=HM/@EntryIndexedValue">HM</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=HN/@EntryIndexedValue">HN</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=HR/@EntryIndexedValue">HR</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=HT/@EntryIndexedValue">HT</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=HU/@EntryIndexedValue">HU</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=ID/@EntryIndexedValue">ID</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=IE/@EntryIndexedValue">IE</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=IL/@EntryIndexedValue">IL</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=IM/@EntryIndexedValue">IM</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=IN/@EntryIndexedValue">IN</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=IO/@EntryIndexedValue">IO</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=IQ/@EntryIndexedValue">IQ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=IR/@EntryIndexedValue">IR</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=IS/@EntryIndexedValue">IS</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=IT/@EntryIndexedValue">IT</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=JE/@EntryIndexedValue">JE</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=JM/@EntryIndexedValue">JM</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=JO/@EntryIndexedValue">JO</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=JP/@EntryIndexedValue">JP</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=KE/@EntryIndexedValue">KE</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=KG/@EntryIndexedValue">KG</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=KH/@EntryIndexedValue">KH</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=KI/@EntryIndexedValue">KI</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=KM/@EntryIndexedValue">KM</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=KN/@EntryIndexedValue">KN</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=KP/@EntryIndexedValue">KP</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=KR/@EntryIndexedValue">KR</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=KW/@EntryIndexedValue">KW</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=KY/@EntryIndexedValue">KY</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=KZ/@EntryIndexedValue">KZ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=LA/@EntryIndexedValue">LA</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=LB/@EntryIndexedValue">LB</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=LC/@EntryIndexedValue">LC</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=LI/@EntryIndexedValue">LI</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=LK/@EntryIndexedValue">LK</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=LR/@EntryIndexedValue">LR</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=LS/@EntryIndexedValue">LS</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=LT/@EntryIndexedValue">LT</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=LU/@EntryIndexedValue">LU</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=LV/@EntryIndexedValue">LV</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=LY/@EntryIndexedValue">LY</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MA/@EntryIndexedValue">MA</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MC/@EntryIndexedValue">MC</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MD/@EntryIndexedValue">MD</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=ME/@EntryIndexedValue">ME</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MF/@EntryIndexedValue">MF</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MG/@EntryIndexedValue">MG</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MH/@EntryIndexedValue">MH</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MK/@EntryIndexedValue">MK</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=ML/@EntryIndexedValue">ML</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MM/@EntryIndexedValue">MM</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MN/@EntryIndexedValue">MN</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MO/@EntryIndexedValue">MO</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MP/@EntryIndexedValue">MP</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MQ/@EntryIndexedValue">MQ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MR/@EntryIndexedValue">MR</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MS/@EntryIndexedValue">MS</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MT/@EntryIndexedValue">MT</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MU/@EntryIndexedValue">MU</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MV/@EntryIndexedValue">MV</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MW/@EntryIndexedValue">MW</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MX/@EntryIndexedValue">MX</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MY/@EntryIndexedValue">MY</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MZ/@EntryIndexedValue">MZ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NA/@EntryIndexedValue">NA</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NC/@EntryIndexedValue">NC</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NE/@EntryIndexedValue">NE</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NF/@EntryIndexedValue">NF</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NG/@EntryIndexedValue">NG</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NI/@EntryIndexedValue">NI</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NL/@EntryIndexedValue">NL</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NO/@EntryIndexedValue">NO</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NP/@EntryIndexedValue">NP</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NR/@EntryIndexedValue">NR</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NU/@EntryIndexedValue">NU</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=NZ/@EntryIndexedValue">NZ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=OM/@EntryIndexedValue">OM</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=OTP/@EntryIndexedValue">OTP</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PA/@EntryIndexedValue">PA</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PE/@EntryIndexedValue">PE</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PF/@EntryIndexedValue">PF</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PG/@EntryIndexedValue">PG</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PH/@EntryIndexedValue">PH</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PK/@EntryIndexedValue">PK</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PL/@EntryIndexedValue">PL</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PM/@EntryIndexedValue">PM</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PN/@EntryIndexedValue">PN</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PR/@EntryIndexedValue">PR</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PS/@EntryIndexedValue">PS</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PT/@EntryIndexedValue">PT</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PW/@EntryIndexedValue">PW</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PY/@EntryIndexedValue">PY</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=QA/@EntryIndexedValue">QA</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=RE/@EntryIndexedValue">RE</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=RO/@EntryIndexedValue">RO</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=RS/@EntryIndexedValue">RS</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=RU/@EntryIndexedValue">RU</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=RW/@EntryIndexedValue">RW</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SA/@EntryIndexedValue">SA</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SB/@EntryIndexedValue">SB</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SC/@EntryIndexedValue">SC</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SD/@EntryIndexedValue">SD</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SE/@EntryIndexedValue">SE</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SG/@EntryIndexedValue">SG</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SH/@EntryIndexedValue">SH</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SI/@EntryIndexedValue">SI</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SJ/@EntryIndexedValue">SJ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SK/@EntryIndexedValue">SK</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SL/@EntryIndexedValue">SL</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SM/@EntryIndexedValue">SM</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SN/@EntryIndexedValue">SN</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SO/@EntryIndexedValue">SO</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SR/@EntryIndexedValue">SR</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SS/@EntryIndexedValue">SS</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=ST/@EntryIndexedValue">ST</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SV/@EntryIndexedValue">SV</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SX/@EntryIndexedValue">SX</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SY/@EntryIndexedValue">SY</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SZ/@EntryIndexedValue">SZ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TC/@EntryIndexedValue">TC</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TD/@EntryIndexedValue">TD</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TF/@EntryIndexedValue">TF</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TG/@EntryIndexedValue">TG</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TH/@EntryIndexedValue">TH</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TJ/@EntryIndexedValue">TJ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TK/@EntryIndexedValue">TK</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TL/@EntryIndexedValue">TL</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TM/@EntryIndexedValue">TM</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TN/@EntryIndexedValue">TN</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TO/@EntryIndexedValue">TO</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TR/@EntryIndexedValue">TR</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TT/@EntryIndexedValue">TT</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TV/@EntryIndexedValue">TV</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TW/@EntryIndexedValue">TW</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TZ/@EntryIndexedValue">TZ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=UA/@EntryIndexedValue">UA</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=UG/@EntryIndexedValue">UG</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=UM/@EntryIndexedValue">UM</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=US/@EntryIndexedValue">US</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=UY/@EntryIndexedValue">UY</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=UZ/@EntryIndexedValue">UZ</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=VA/@EntryIndexedValue">VA</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=VC/@EntryIndexedValue">VC</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=VE/@EntryIndexedValue">VE</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=VG/@EntryIndexedValue">VG</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=VI/@EntryIndexedValue">VI</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=VN/@EntryIndexedValue">VN</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=VU/@EntryIndexedValue">VU</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=WF/@EntryIndexedValue">WF</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=WS/@EntryIndexedValue">WS</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=YE/@EntryIndexedValue">YE</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=YT/@EntryIndexedValue">YT</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=ZA/@EntryIndexedValue">ZA</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=ZM/@EntryIndexedValue">ZM</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=ZW/@EntryIndexedValue">ZW</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=15b5b1f1_002D457c_002D4ca6_002Db278_002D5615aedc07d3/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static readonly fields (private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="READONLY_FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /&gt;&lt;/Policy&gt;</s:String> <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=15b5b1f1_002D457c_002D4ca6_002Db278_002D5615aedc07d3/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static readonly fields (private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="READONLY_FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /&gt;&lt;/Policy&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=236f7aa5_002D7b06_002D43ca_002Dbf2a_002D9b31bfcff09a/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Any" AccessRightKinds="Private" Description="Constant fields (private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="CONSTANT_FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" Prefix="_" Suffix="" Style="AA_BB" /&gt;&lt;/Policy&gt;</s:String> <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=236f7aa5_002D7b06_002D43ca_002Dbf2a_002D9b31bfcff09a/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Any" AccessRightKinds="Private" Description="Constant fields (private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="CONSTANT_FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" Prefix="_" Suffix="" Style="AA_BB" /&gt;&lt;/Policy&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=669e5282_002Dfb4b_002D4e90_002D91e7_002D07d269d04b60/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Any" AccessRightKinds="Protected, ProtectedInternal, Internal, Public, PrivateProtected" Description="Constant fields (not private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="CONSTANT_FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AA_BB" /&gt;&lt;/Policy&gt;</s:String> <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=669e5282_002Dfb4b_002D4e90_002D91e7_002D07d269d04b60/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Any" AccessRightKinds="Protected, ProtectedInternal, Internal, Public, PrivateProtected" Description="Constant fields (not private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="CONSTANT_FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AA_BB" /&gt;&lt;/Policy&gt;</s:String>

249
assets/res/CountryCodes.ln Normal file
View File

@ -0,0 +1,249 @@
不丹
东帝汶
中国
中非
丹麦
乌克兰
乌兹别克斯坦
乌干达
乌拉圭
乍得
也门
亚美尼亚
以色列
伊拉克
伊朗
伯利兹
佛得角
俄罗斯
保加利亚
克罗地亚
关岛
冈比亚
冰岛
几内亚
几内亚比绍
列支敦士登
刚果共和国
刚果民主共和国
利比亚
利比里亚
加拿大
加纳
加蓬
匈牙利
北马其顿
北马里亚纳群岛
南乔治亚和南桑威奇群岛
南极洲
南苏丹
南非
博茨瓦纳
卡塔尔
卢旺达
卢森堡
印度
印度尼西亚
危地马拉
厄瓜多尔
厄立特里亚
叙利亚
古巴
台湾
吉尔吉斯斯坦
吉布提
哈萨克斯坦
哥伦比亚
哥斯达黎加
喀麦隆
图瓦卢
土库曼斯坦
土耳其
圣卢西亚
圣基茨和尼维斯
圣多美和普林西比
圣巴泰勒米
圣文森特和格林纳丁斯
圣皮埃尔和密克隆
圣诞岛
圣赫勒拿
圣马力诺
圭亚那
坦桑尼亚
埃及
埃塞俄比亚
基里巴斯
塔吉克斯坦
塞内加尔
塞尔维亚
塞拉利昂
塞浦路斯
塞舌尔
墨西哥
多哥
多米尼克
多米尼加
奥兰
奥地利
委内瑞拉
孟加拉国
安哥拉
安圭拉
安提瓜和巴布达
安道尔
密克罗尼西亚联邦
尼加拉瓜
尼日利亚
尼日尔
尼泊尔
巴勒斯坦
巴哈马
巴基斯坦
巴巴多斯
巴布亚新几内亚
巴拉圭
巴拿马
巴林
巴西
布基纳法索
布隆迪
布韦岛
希腊
帕劳
库克群岛
库拉索
开曼群岛
德国
意大利
所罗门群岛
托克劳
拉脱维亚
挪威
捷克
摩尔多瓦
摩洛哥
摩纳哥
文莱
斐济
斯威士兰
斯洛伐克
斯洛文尼亚
斯瓦尔巴和扬马延
斯里兰卡
新加坡
新喀里多尼亚
新西兰
日本
智利
朝鲜
柬埔寨
根西
格林纳达
格陵兰
格鲁吉亚
梵蒂冈
比利时
毛里塔尼亚
毛里求斯
汤加
沙特阿拉伯
法国
法属南部和南极领地
法属圣马丁
法属圭亚那
法属波利尼西亚
法罗群岛
波兰
波多黎各
波黑
泰国
泽西
津巴布韦
洪都拉斯
海地
澳大利亚
澳门
爱尔兰
爱沙尼亚
牙买加
特克斯和凯科斯群岛
特立尼达和多巴哥
玻利维亚
瑙鲁
瑞典
瑞士
瓜德罗普
瓦利斯和富图纳
瓦努阿图
留尼汪
白俄罗斯
百慕大
皮特凯恩群岛
直布罗陀
福克兰群岛
科威特
科摩罗
科特迪瓦
科科斯基林群岛
秘鲁
突尼斯
立陶宛
索马里
约旦
纳米比亚
纽埃
缅甸
罗马尼亚
美国
美国本土外小岛屿
美属维尔京群岛
美属萨摩亚
老挝
肯尼亚
芬兰
苏丹
苏里南
英国
英属印度洋领地
英属维尔京群岛
荷兰
荷兰加勒比区
荷属圣马丁
莫桑比克
莱索托
菲律宾
萨尔瓦多
萨摩亚
葡萄牙
蒙古
蒙特塞拉特
西撒哈拉
西班牙
诺福克岛
贝宁
赞比亚
赤道几内亚
赫德岛和麦克唐纳群岛
越南
阿塞拜疆
阿富汗
阿尔及利亚
阿尔巴尼亚
阿曼
阿根廷
阿联酋
阿鲁巴
韩国
香港
马尔代夫
马恩岛
马拉维
马提尼克
马来西亚
马约特
马绍尔群岛
马耳他
马达加斯加
马里
黎巴嫩
黑山

View File

View File

@ -0,0 +1,70 @@
不为其中之一
不以什么开始
不以什么结束
不包含
不排序
不等于
丧偶
中专
中共党员
为其中之一
以什么开始
以什么结束
保密
保密
信息
倒序排序
共青团员
出生证
初中
包含
博士
博士后
同步数据库结构
外国人居留证
外部错误
大专
大于
大于等于
宕机
小于
小于等于
小学
已婚
并且
成功
或者
护照
插入种子数据
无效操作
无效输入
日期范围
未处理异常
未婚
本科
比较数据库结构
港澳台通行证
硕士
示例导出
离异
等于
等于
等于
管理模块
系统模块
结果非预期
群众
自定义
范围
警告
调试
跟踪
身份证
错误
随机排序
顺序排序
高中

View File

@ -0,0 +1,21 @@
6位数字
8位以上数字字母组合
XML注释文件不存在
中文姓名
事务已回滚
事务已提交
区号电话号码分机号
参数格式不正确
开始事务
支付宝账号
数据库同步开始
数据库结构同步完成
无效端口号
无效证件号码
时间表达式
用户名不能是手机号码
用户名长度4位以上
请求对象不能为空
邀请码不正确
配置文件初始化完毕
非JSON字符串

View File

@ -2,66 +2,29 @@
上次执行状态 上次执行状态
上次执行耗时 上次执行耗时
下次执行时间 下次执行时间
不为其中之一
不以什么开始
不以什么结束
不包含
不排序
不等于
丧偶
中专
中共党员
为其中之一
人工审核 人工审核
以什么开始
以什么结束
作业名称 作业名称
作业状态 作业状态
保密
信息
倒序排序
全部数据 全部数据
公告 公告
共青团员
出生证
创建时间 创建时间
初中
删除 删除
包含
博士
博士后
发送失败 发送失败
同步数据库结构
响应体 响应体
响应状态码 响应状态码
唯一编码 唯一编码
备注 备注
外国人居留证
外部错误
大专
大于
大于等于
字典内容导出 字典内容导出
宕机
客户端IP 客户端IP
小于
小于等于
小学
已发送 已发送
已婚
已校验 已校验
已读 已读
并且
成功
或者
所属角色 所属角色
所属部门 所属部门
手机 手机
手机号 手机号
执行耗时 执行耗时
执行计划 执行计划
护照
指定部门数据 指定部门数据
按钮 按钮
排序 排序
@ -69,66 +32,41 @@
接口导出 接口导出
接口描述 接口描述
接口路径 接口路径
插入种子数据
操作系统 操作系统
数据范围 数据范围
无效操作
无效输入
无限权限 无限权限
日期范围
是否启用 是否启用
显示仪表板 显示仪表板
最后登录时间 最后登录时间
未处理异常
未婚
未读 未读
本人数据 本人数据
本科
本部门和下级部门数据 本部门和下级部门数据
本部门数据 本部门数据
框架 框架
比较数据库结构
注册 注册
消息主题 消息主题
消息摘要 消息摘要
消息类型 消息类型
港澳台通行证
用户代理 用户代理
用户名 用户名
用户导出 用户导出
电子邮箱 电子邮箱
登录 登录
登录名 登录名
登录日志导出 登录日志导出
硕士
示例导出
离异
空闲 空闲
站内信导出 站内信导出
等于
等待发送 等待发送
管理模块
系统模块
绑定手机号码 绑定手机号码
结果非预期
群众
自定义
范围
菜单 菜单
角色名称 角色名称
角色导出 角色导出
解绑手机号码 解绑手机号码
警告
计划作业导出 计划作业导出
计划作业执行记录导出 计划作业执行记录导出
请求方式 请求方式
请求日志导出 请求日志导出
调试
跟踪
跟踪标识 跟踪标识
跟踪编号
身份证
运行 运行
通知 通知
邮箱号 邮箱号
@ -137,11 +75,7 @@
配置导出 配置导出
重设密码 重设密码
链接 链接
错误
随机排序
项值 项值
项名 项名
顺序排序
高中
默认角色 默认角色
默认部门 默认部门

View File

@ -1,17 +1,9 @@
1分钟内只能发送1次 1分钟内只能发送1次
6位数字
8位以上数字字母组合
XML注释文件不存在
中文姓名
事务已回滚
事务已提交
人机校验请求不能为空 人机校验请求不能为空
人机验证未通过 人机验证未通过
作业名称不能为空 作业名称不能为空
允许的文件大小 允许的文件大小
允许的文件格式 允许的文件格式
区号电话号码分机号
参数格式不正确
唯一编码不能为空 唯一编码不能为空
图标代码不能为空 图标代码不能为空
图标名称不能为空 图标名称不能为空
@ -19,55 +11,61 @@ XML注释文件不存在
字典名称不能为空 字典名称不能为空
字典目录不存在 字典目录不存在
字典目录编号不能为空 字典目录编号不能为空
字典目录编号不能为空
字典编码不能为空 字典编码不能为空
学历不正确 学历不正确
密码不能为空 密码不能为空
密码不能为空
密码不能为空
密码不能为空
已处理完毕
已处理完毕
已处理完毕 已处理完毕
并发冲突_请稍后重试 并发冲突_请稍后重试
开始事务
性别不正确 性别不正确
手机号码不正确 手机号码不正确
手机号码不能为空 手机号码不能为空
接口编码不存在 接口编码不存在
支付宝账号
政治面貌不正确 政治面貌不正确
数据库同步开始
数据库服务器时钟偏移 数据库服务器时钟偏移
数据库结构同步完成
文件不能为空 文件不能为空
新密码不能为空 新密码不能为空
新手机号码验证码不正确 新手机号码验证码不正确
无效端口号
无效证件号码
旧密码不正确 旧密码不正确
旧密码不能为空 旧密码不能为空
旧手机号码不正确 旧手机号码不正确
旧手机号码验证码不正确 旧手机号码验证码不正确
时间表达式
时间计划不能为空 时间计划不能为空
未指定部门 未指定部门
未获取到待执行任务 未获取到待执行任务
模块名称不能为空 模块名称不能为空
模块类型不能为空
模块说明不能为空 模块说明不能为空
此节点已下线 此节点已下线
此节点已下线
民族不正确 民族不正确
消息主题不能为空 消息主题不能为空
消息内容不能为空 消息内容不能为空
父节点不存在 父节点不存在
用户不存在 用户不存在
用户名不能为空 用户名不能为空
用户名不能是手机号码 用户名不能为空
用户名不能为空
用户名或密码错误 用户名或密码错误
用户名长度4位以上
用户头像不能为空 用户头像不能为空
用户编号不存在 用户编号不存在
目标设备不能为空 目标设备不能为空
目标设备不能为空
短信验证请求不能为空
短信验证请求不能为空
短信验证请求不能为空 短信验证请求不能为空
站内信不存在 站内信不存在
站内信状态不正确 站内信状态不正确
站内信类型不正确 站内信类型不正确
缓存键不能为空 缓存键不能为空
网络地址不正确 网络地址不正确
网络地址不正确
网络地址不正确
菜单名称不能为空 菜单名称不能为空
菜单标题不能为空 菜单标题不能为空
菜单类型不正确 菜单类型不正确
@ -83,21 +81,19 @@ XML注释文件不存在
该部门下存在子部门 该部门下存在子部门
该部门下存在用户 该部门下存在用户
请求地址不能为空 请求地址不能为空
请求对象不能为空
请求方法不正确 请求方法不正确
请稍后重试
请联系管理员激活账号 请联系管理员激活账号
读取用户令牌出错 读取用户令牌出错
账号不能为空 账号不能为空
邀请码不正确
邮箱验证码不正确 邮箱验证码不正确
部门不存在 部门不存在
部门名称不能为空 部门名称不能为空
配置文件初始化完毕
键值不能为空 键值不能为空
键名称不能为空 键名称不能为空
键名称不能为空
随机延时结束时间不正确 随机延时结束时间不正确
随机延时起始时间不正确 随机延时起始时间不正确
非JSON字符串
验证数据不能为空 验证数据不能为空
验证码不正确 验证码不正确
验证码不能为空 验证码不能为空

View File

@ -9,22 +9,4 @@
Command="dotnet t4 ./gen.cs.tt -o ../dist/backend/$(ProjectName)/Ln.cs" Command="dotnet t4 ./gen.cs.tt -o ../dist/backend/$(ProjectName)/Ln.cs"
StdOutEncoding="utf-8" /> StdOutEncoding="utf-8" />
</Target> </Target>
<ItemGroup>
<None Include="$(SolutionDir)/assets/res/Statements.ln">
<Link>Languages/Statements.ln</Link>
</None>
<None Include="$(SolutionDir)/assets/res/Nations.ln">
<Link>Languages/Nations.ln</Link>
</None>
<None Include="$(SolutionDir)/assets/res/Fields.ln">
<Link>Languages/Fields.ln</Link>
</None>
<EmbeddedResource Include="$(SolutionDir)/assets/res/Ln.resx">
<Link>Languages/Ln.resx</Link>
<Generator>PublicResXFileCodeGenerator</Generator>
</EmbeddedResource>
<Compile Include="$(SolutionDir)/dist/backend/$(ProjectName)/Ln.Designer.cs">
<Link>Languages/Ln.Designer.cs</Link>
</Compile>
</ItemGroup>
</Project> </Project>

1
docker/README.md Normal file
View File

@ -0,0 +1 @@
docker

Submodule refs/Furion deleted from d23c7cca55

View File

@ -20,8 +20,10 @@ git tag -d $tag
git tag $tag git tag $tag
git push --tags origin release git push --tags origin release
Start-Process -FilePath "https://github.com/nsnail/NetAdmin/compare/main...release" Start-Process -FilePath "https://github.com/nsnail/NetAdmin/compare/main...release"
Write-Host "按『Enter』回到分支『Ctrl+C』退出" Write-Host "按『Enter』回到tk分支『Ctrl+C』退出"
Pause Pause
git checkout main git checkout main
git pull git pull
git branch -D release git branch -D release
git branch -D tk
git checkout -b tk

View File

@ -1,6 +1,7 @@
<#@ template language="C#" #> <#@ template language="C#" #>
<#@ output encoding="utf-8" extension="resx" #> <#@ output encoding="utf-8" extension="resx" #>
<#@ import namespace="System.IO" #> <#@ import namespace="System.IO" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text.RegularExpressions" #> <#@ import namespace="System.Text.RegularExpressions" #>
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
@ -28,14 +29,11 @@
</resheader> </resheader>
<# <#
var regex = new Regex(@"^\d", RegexOptions.Compiled); var regex = new Regex(@"^\d", RegexOptions.Compiled);
foreach (var file in Directory.GetFiles("../assets/res/", "*.ln")) foreach (var line in Directory.GetFiles("../assets/res/", "*.ln").SelectMany(x => File.ReadLines(x)).Distinct())
{ {
foreach (var line in File.ReadLines(file))
{
#> #>
<data name="<#= regex.IsMatch(line) ? "_" : "" #><#= line #>" xml:space="preserve"><value><#= line #></value></data> <data name="<#= regex.IsMatch(line) ? "_" : "" #><#= line #>" xml:space="preserve"><value><#= line #></value></data>
<# <#
}
} }
#> #>
</root> </root>

View File

@ -1,15 +1,15 @@
{ {
"solution": "NetAdmin.sln", "solution": "NetAdmin.sln",
"mappings": { "mappings": {
"Furion.Pure.NS": "../refs/Furion/framework/Furion.Pure/Furion.Pure.csproj" "Gurion": "../refs/Gurion/src/Gurion.csproj"
}, },
"restore": [ "restore": [
{ {
"name": "NetAdmin.Infrastructure", "name": "NetAdmin.Infrastructure",
"packages": [ "packages": [
{ {
"packageName": "Furion.Pure.NS", "packageName": "Gurion",
"version": "4.9.5.8-ns1" "version": "1.1.0"
} }
] ]
} }

View File

@ -17,6 +17,20 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{5198A03D-0
""" """
); );
content = Regex.Replace(
content,
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"docker\", \"docker\", \"{E80A1018-C354-4A26-9029-8847BB9DA864}\"(?:.|\n)*?EndProject",
$$"""
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{E80A1018-C354-4A26-9029-8847BB9DA864}"
ProjectSection(SolutionItems) = preProject
{{string.Join('\n',
Directory.GetFiles(@"../docker", "*")
.Select(x=>$" {Path.GetFileName(x)} = docker/{Path.GetFileName(x)}")
)}}
EndProject
"""
);
content = Regex.Replace( content = Regex.Replace(
content, content,
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"workflows\", \"workflows\", \"{3C6F049E-3EE8-4D66-9AFF-E8A369032487}\"(?:.|\n)*?EndProject", "Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"workflows\", \"workflows\", \"{3C6F049E-3EE8-4D66-9AFF-E8A369032487}\"(?:.|\n)*?EndProject",

View File

@ -25,16 +25,16 @@ global using FreeSql;
global using FreeSql.Aop; global using FreeSql.Aop;
global using FreeSql.DataAnnotations; global using FreeSql.DataAnnotations;
global using FreeSql.Internal.Model; global using FreeSql.Internal.Model;
global using Furion; global using Gurion;
global using Furion.Authorization; global using Gurion.Authorization;
global using Furion.ConfigurableOptions; global using Gurion.ConfigurableOptions;
global using Furion.DataEncryption; global using Gurion.DataEncryption;
global using Furion.DataValidation; global using Gurion.DataValidation;
global using Furion.DependencyInjection; global using Gurion.DependencyInjection;
global using Furion.DynamicApiController; global using Gurion.DynamicApiController;
global using Furion.EventBus; global using Gurion.EventBus;
global using Furion.SpecificationDocument; global using Gurion.SpecificationDocument;
global using Furion.UnifyResult; global using Gurion.UnifyResult;
global using Mapster; global using Mapster;
global using Microsoft.AspNetCore.Authorization; global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Builder; global using Microsoft.AspNetCore.Builder;

View File

@ -1,9 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<DefineConstants>DBTYPE_SQLITE</DefineConstants>
</PropertyGroup>
<Import Project="$(SolutionDir)/build/code.quality.props"/> <Import Project="$(SolutionDir)/build/code.quality.props"/>
<ItemGroup> <ItemGroup>
<ProjectReference Include="../NetAdmin.AdmServer.Domain/NetAdmin.AdmServer.Domain.csproj"/>
<ProjectReference Include="../NetAdmin.SysComponent.Application/NetAdmin.SysComponent.Application.csproj"/> <ProjectReference Include="../NetAdmin.SysComponent.Application/NetAdmin.SysComponent.Application.csproj"/>
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="MailKit" Version="4.8.0"/>
</ItemGroup>
</Project> </Project>

View File

@ -1,2 +0,0 @@
<wpf:ResourceDictionary xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xml:space="preserve">
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=services_005Cadm_005Cpartial/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<Import Project="$(SolutionDir)/build/code.quality.props"/> <Import Project="$(SolutionDir)/build/code.quality.props"/>
<ItemGroup> <ItemGroup>
<ProjectReference Include="../NetAdmin.SysComponent.Cache/NetAdmin.SysComponent.Cache.csproj"/>
<ProjectReference Include="../NetAdmin.AdmServer.Application/NetAdmin.AdmServer.Application.csproj"/> <ProjectReference Include="../NetAdmin.AdmServer.Application/NetAdmin.AdmServer.Application.csproj"/>
<ProjectReference Include="../NetAdmin.SysComponent.Cache/NetAdmin.SysComponent.Cache.csproj"/>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="$(SolutionDir)/build/code.quality.props"/>
<ItemGroup>
<Content Include="$(SolutionDir)/assets/seed-data/Adm_*.json" LinkBase="SeedData" CopyToOutputDirectory="PreserveNewest"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="../NetAdmin.AdmServer.Infrastructure/NetAdmin.AdmServer.Infrastructure.csproj"/>
<ProjectReference Include="../NetAdmin.SysComponent.Domain/NetAdmin.SysComponent.Domain.csproj"/>
</ItemGroup>
</Project>

View File

@ -1,8 +1,8 @@
using NetAdmin.AdmServer.Host.Filters; using NetAdmin.AdmServer.Host.Filters;
using NetAdmin.Domain.Contexts;
using NetAdmin.Domain.DbMaps.Dependency.Fields; using NetAdmin.Domain.DbMaps.Dependency.Fields;
using NetAdmin.Domain.Enums.Sys; using NetAdmin.SysComponent.Domain.Contexts;
using NetAdmin.Host.Extensions; using NetAdmin.SysComponent.Domain.Enums.Sys;
using NetAdmin.SysComponent.Host.Extensions;
namespace NetAdmin.AdmServer.Host.Extensions; namespace NetAdmin.AdmServer.Host.Extensions;

View File

@ -1,17 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk.Web"> <Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="$(SolutionDir)/build/code.quality.props"/> <Import Project="$(SolutionDir)/build/code.quality.props"/>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="$(SolutionDir)/assets/captcha/**" LinkBase="Assets/Captcha"/>
<EmbeddedResource Include="$(SolutionDir)/CHANGELOG.md" LogicalName="CHANGELOG.md"/> <EmbeddedResource Include="$(SolutionDir)/CHANGELOG.md" LogicalName="CHANGELOG.md"/>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="../NetAdmin.SysComponent.Host/NetAdmin.SysComponent.Host.csproj"/>
<ProjectReference Include="../NetAdmin.AdmServer.Cache/NetAdmin.AdmServer.Cache.csproj"/> <ProjectReference Include="../NetAdmin.AdmServer.Cache/NetAdmin.AdmServer.Cache.csproj"/>
</ItemGroup> <ProjectReference Include="../NetAdmin.SysComponent.Host/NetAdmin.SysComponent.Host.csproj"/>
<ItemGroup>
<None Update="*.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup> </ItemGroup>
<ItemGroup Condition="'$(Configuration)' != 'Debug'"> <ItemGroup Condition="'$(Configuration)' != 'Debug'">
<EmbeddedResource Include="../../../dist/frontend/admin/**/*" LinkBase="UI"/> <EmbeddedResource Include="../../../dist/frontend/admin/**/*" LinkBase="UI"/>

View File

@ -91,7 +91,8 @@ namespace NetAdmin.AdmServer.Host
.AddFreeSqlWithArgs() // 添加 freeSql .AddFreeSqlWithArgs() // 添加 freeSql
.AddRemoteRequest() // 添加远程请求 .AddRemoteRequest() // 添加远程请求
.AddCorsAccessor() // 添加支持跨域访问 .AddCorsAccessor() // 添加支持跨域访问
.AddContextUser() // 添加上下文用户 .AddContextUserToken() // 添加上下文用户令牌
.AddContextUserInfo() // 添加上下文用户信息
.AddRedisCache() // 添加 Redis 缓存 .AddRedisCache() // 添加 Redis 缓存
.AddSchedules() // 添加计划任务 .AddSchedules() // 添加计划任务

View File

@ -1,45 +0,0 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"SpecificationDocumentSettings": {
"GroupOpenApiInfos": [
{
"Group": "Sys",
"Title": "系统组件",
"Description": "NetAdmin - 系统组件",
},
{
"Group": "Adm",
"Title": "管理服务",
"Description": "NetAdmin - 管理服务",
},
{
"Group": "Tpl",
"Visible": false,
},
{
"Group": "Probe",
"Visible": false,
}
],
"SecurityDefinitions": [
{
"Id": "Bearer",
"Type": "ApiKey",
"Name": "Authorization",
"Description": "JWT Authorization header using the Bearer scheme.",
"BearerFormat": "JWT",
"Scheme": "bearer",
"In": "Header",
"Requirement": {
"Scheme": {
"Reference": {
"Id": "Bearer",
"Type": "SecurityScheme"
},
"Accesses": []
}
}
}
]
}
}

View File

@ -0,0 +1,10 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft.AspNetCore": "Debug",
"System.Logging.EventBusService": "Debug"
},
}
}

View File

@ -0,0 +1,10 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft.AspNetCore": "Debug",
"System.Logging.EventBusService": "Debug"
},
}
}

View File

@ -0,0 +1,10 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft.AspNetCore": "Debug",
"System.Logging.EventBusService": "Debug"
},
}
}

View File

@ -0,0 +1,99 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
// Swagger文档配置 ------------------------------------------------------------------------------
"SpecificationDocumentSettings": {
"GroupOpenApiInfos": [
{
"Group": "Sys",
"Title": "系统组件",
"Description": "NetAdmin - 系统组件"
},
{
"Group": "Adm",
"Title": "管理服务",
"Description": "NetAdmin - 管理服务"
},
{
"Group": "Tpl",
"Visible": false
},
{
"Group": "Probe",
"Visible": false
}
],
"XmlComments": [
"NetAdmin.AdmServer.Application.xml",
"NetAdmin.AdmServer.Cache.xml",
"NetAdmin.AdmServer.Domain.xml",
"NetAdmin.AdmServer.Host.xml",
"NetAdmin.AdmServer.Infrastructure.xml",
"FreeSql.xml",
"NetAdmin.Application.xml",
"NetAdmin.Cache.xml",
"NetAdmin.Domain.xml",
"NetAdmin.Host.xml",
"NetAdmin.Infrastructure.xml",
"NetAdmin.SysComponent.Application.xml",
"NetAdmin.SysComponent.Cache.xml",
"NetAdmin.SysComponent.Domain.xml",
"NetAdmin.SysComponent.Host.xml",
"NetAdmin.SysComponent.Infrastructure.xml"
]
},
// 数据库配置 --------------------------------------------------------------------------------------------------------
"Database": {
"DbType": "Sqlite",
"ConnStr": "data source=NetAdmin.db",
"SeedDataRelativePath": "SeedData"
},
// JWT鉴权配置 -------------------------------------------------------------------------------------------------------
"JWTSettings": {
"ValidateIssuerSigningKey": true,
"IssuerSigningKey": "bO0BCAGxpxYnm6AE4XpgO25T27NayFzjGgfDqBuzUzD6ROpFiZUi3KjVg93bdGek",
"ValidateIssuer": true,
"ValidIssuer": "签发方",
"ValidateAudience": true,
"ValidAudience": "签收方",
"ValidateLifetime": true,
"ExpiredTime": 5256000,
"ClockSkew": 5,
"Algorithm": "HS256"
},
// 日志配置 ----------------------------------------------------------------------------------------------------------
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"System.Logging.EventBusService": "Error"
}
},
// Redis配置 --------------------------------------------------------------------------------------------------------
"Redis": {
"Instances": [
{
"Name": "DataCache",
"ConnStr": "localhost:6379,abortConnect=false",
"DataBase": 0
}
]
},
// 文件上传配置 -------------------------------------------------------------------------------------------------------
"Upload": {
"ContentTypes": [
"image/jpg",
"image/png",
"image/jpeg",
"image/gif"
],
"MaxSize": 1073741824,
"Minio": {
"ServerAddress": "vm-ubt-1:9000",
"AccessKey": "nVMM0gSqwyIjM8iZ",
"SecretKey": "F8OZngGrNsZSYn4MP9swwMSf5rfm61EC",
"BucketName": "cloud-code",
"AccessUrl": "http://vm-ubt-1:9000",
"Secure": false
}
},
}

View File

@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="$(SolutionDir)/build/code.quality.props"/>
<ItemGroup>
<ProjectReference Include="../NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj"/>
</ItemGroup>
<ItemGroup>
<None Include="$(SolutionDir)/assets/res/NetAdmin.AdmServer.Statements.ln">
<Link>Languages/NetAdmin.AdmServer.Statements.ln</Link>
</None>
<None Include="$(SolutionDir)/assets/res/NetAdmin.AdmServer.Fields.ln">
<Link>Languages/NetAdmin.AdmServer.Fields.ln</Link>
</None>
</ItemGroup>
<ItemGroup>
<None Update="*.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

View File

@ -1,6 +1,7 @@
using NetAdmin.Domain.Dto.Dependency;
using NetAdmin.Domain.Dto.Tpl.Example; using NetAdmin.Domain.Dto.Tpl.Example;
namespace NetAdmin.SysComponent.Application.Modules.Tpl; namespace NetAdmin.Application.Modules.Tpl;
/// <summary> /// <summary>
/// 示例模块 /// 示例模块

View File

@ -1,7 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<DefineConstants>DBTYPE_SQLITE</DefineConstants>
</PropertyGroup>
<Import Project="$(SolutionDir)/build/code.quality.props"/> <Import Project="$(SolutionDir)/build/code.quality.props"/>
<ItemGroup> <ItemGroup>
<ProjectReference Include="../NetAdmin.Domain/NetAdmin.Domain.csproj"/> <ProjectReference Include="../NetAdmin.Domain/NetAdmin.Domain.csproj"/>

View File

@ -0,0 +1,8 @@
using NetAdmin.Application.Modules.Tpl;
namespace NetAdmin.Application.Services.Tpl.Dependency;
/// <summary>
/// 示例服务
/// </summary>
public interface IExampleService : IService, IExampleModule;

View File

@ -1,8 +1,10 @@
using NetAdmin.Application.Repositories;
using NetAdmin.Application.Services.Tpl.Dependency;
using NetAdmin.Domain.DbMaps.Tpl; using NetAdmin.Domain.DbMaps.Tpl;
using NetAdmin.Domain.Dto.Dependency;
using NetAdmin.Domain.Dto.Tpl.Example; using NetAdmin.Domain.Dto.Tpl.Example;
using NetAdmin.SysComponent.Application.Services.Tpl.Dependency;
namespace NetAdmin.SysComponent.Application.Services.Tpl; namespace NetAdmin.Application.Services.Tpl;
/// <inheritdoc cref="IExampleService" /> /// <inheritdoc cref="IExampleService" />
public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) // public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
@ -27,10 +29,10 @@ public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
{ {
req.ThrowIfInvalid(); req.ThrowIfInvalid();
return QueryInternal(req) return QueryInternal(req)
#if DBTYPE_SQLSERVER #if DBTYPE_SQLSERVER
.WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait)
#endif #endif
.CountAsync(); .CountAsync();
} }
/// <inheritdoc /> /// <inheritdoc />
@ -53,10 +55,10 @@ public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
{ {
req.ThrowIfInvalid(); req.ThrowIfInvalid();
return QueryInternal(req) return QueryInternal(req)
#if DBTYPE_SQLSERVER #if DBTYPE_SQLSERVER
.WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait)
#endif #endif
.AnyAsync(); .AnyAsync();
} }
/// <inheritdoc /> /// <inheritdoc />

View File

@ -0,0 +1,9 @@
using NetAdmin.Application.Modules.Tpl;
using NetAdmin.Application.Services.Tpl.Dependency;
namespace NetAdmin.Cache.Tpl.Dependency;
/// <summary>
/// 示例缓存
/// </summary>
public interface IExampleCache : ICache<IDistributedCache, IExampleService>, IExampleModule;

View File

@ -1,8 +1,9 @@
using NetAdmin.Application.Services.Tpl.Dependency;
using NetAdmin.Cache.Tpl.Dependency;
using NetAdmin.Domain.Dto.Dependency;
using NetAdmin.Domain.Dto.Tpl.Example; using NetAdmin.Domain.Dto.Tpl.Example;
using NetAdmin.SysComponent.Application.Services.Tpl.Dependency;
using NetAdmin.SysComponent.Cache.Tpl.Dependency;
namespace NetAdmin.SysComponent.Cache.Tpl; namespace NetAdmin.Cache.Tpl;
/// <inheritdoc cref="IExampleCache" /> /// <inheritdoc cref="IExampleCache" />
public sealed class ExampleCache(IDistributedCache cache, IExampleService service) public sealed class ExampleCache(IDistributedCache cache, IExampleService service)

View File

@ -1,5 +1,3 @@
using NetAdmin.Domain.Dto.Sys.User;
namespace NetAdmin.Domain.Contexts; namespace NetAdmin.Domain.Contexts;
/// <summary> /// <summary>
@ -43,9 +41,9 @@ public sealed record ContextUserToken : DataAbstraction
/// <summary> /// <summary>
/// 从 QueryUserRsp 创建上下文用户 /// 从 QueryUserRsp 创建上下文用户
/// </summary> /// </summary>
public static ContextUserToken Create(QueryUserRsp user) public static ContextUserToken Create(long id, Guid token, string userName, long deptId)
{ {
return new ContextUserToken { Id = user.Id, Token = user.Token, UserName = user.UserName, DeptId = user.DeptId }; return new ContextUserToken { Id = id, Token = token, UserName = userName, DeptId = deptId };
} }
/// <summary> /// <summary>

View File

@ -1,7 +1,7 @@
namespace NetAdmin.Domain.DbMaps.Dependency.Fields; namespace NetAdmin.Domain.DbMaps.Dependency.Fields;
/// <summary> /// <summary>
/// 更新用户字段接口 /// 修改用户字段接口
/// </summary> /// </summary>
public interface IFieldModifiedUser public interface IFieldModifiedUser
{ {

View File

@ -1,12 +1,12 @@
namespace NetAdmin.Domain.DbMaps.Dependency.Fields; namespace NetAdmin.Domain.DbMaps.Dependency.Fields;
/// <summary> /// <summary>
/// 描述字段接口 /// 备注字段接口
/// </summary> /// </summary>
public interface IFieldSummary public interface IFieldSummary
{ {
/// <summary> /// <summary>
/// 描述 /// 备注
/// </summary> /// </summary>
string Summary { get; init; } string Summary { get; init; }
} }

View File

@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
/// <inheritdoc /> /// <inheritdoc />
public abstract record ImmutableEntity : ImmutableEntity<long> public abstract record ImmutableEntity : ImmutableEntity<long>
{ {
/// <inheritdoc cref="EntityBase{T}.Id" /> /// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)] [Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore] [CsvIgnore]
[Snowflake] [Snowflake]
@ -17,19 +19,25 @@ public abstract record ImmutableEntity : ImmutableEntity<long>
public abstract record ImmutableEntity<T> : LiteImmutableEntity<T>, IFieldCreatedUser public abstract record ImmutableEntity<T> : LiteImmutableEntity<T>, IFieldCreatedUser
where T : IEquatable<T> where T : IEquatable<T>
{ {
/// <inheritdoc cref="IFieldCreatedUser.CreatedUserId" /> /// <summary>
/// 创建者编号
/// </summary>
[Column(CanUpdate = false, Position = -1)] [Column(CanUpdate = false, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public long? CreatedUserId { get; init; } public long? CreatedUserId { get; init; }
/// <inheritdoc cref="IFieldCreatedUser.CreatedUserName" /> /// <summary>
/// 创建者用户名
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)] [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string CreatedUserName { get; init; } public virtual string CreatedUserName { get; init; }
/// <inheritdoc cref="EntityBase{T}.Id" /> /// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)] [Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore] [CsvIgnore]
public override T Id { get; init; } public override T Id { get; init; }

View File

@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
/// <inheritdoc /> /// <inheritdoc />
public abstract record LiteImmutableEntity : LiteImmutableEntity<long> public abstract record LiteImmutableEntity : LiteImmutableEntity<long>
{ {
/// <inheritdoc cref="EntityBase{T}.Id" /> /// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)] [Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore] [CsvIgnore]
[Snowflake] [Snowflake]
@ -17,13 +19,17 @@ public abstract record LiteImmutableEntity : LiteImmutableEntity<long>
public abstract record LiteImmutableEntity<T> : EntityBase<T>, IFieldCreatedTime public abstract record LiteImmutableEntity<T> : EntityBase<T>, IFieldCreatedTime
where T : IEquatable<T> where T : IEquatable<T>
{ {
/// <inheritdoc cref="IFieldCreatedTime.CreatedTime" /> /// <summary>
/// 创建时间
/// </summary>
[Column(ServerTime = DateTimeKind.Local, CanUpdate = false, Position = -1)] [Column(ServerTime = DateTimeKind.Local, CanUpdate = false, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual DateTime CreatedTime { get; init; } public virtual DateTime CreatedTime { get; init; }
/// <inheritdoc cref="EntityBase{T}.Id" /> /// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)] [Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]

View File

@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
/// <inheritdoc /> /// <inheritdoc />
public abstract record LiteMutableEntity : LiteMutableEntity<long> public abstract record LiteMutableEntity : LiteMutableEntity<long>
{ {
/// <inheritdoc cref="EntityBase{T}.Id" /> /// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)] [Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore] [CsvIgnore]
[Snowflake] [Snowflake]
@ -16,12 +18,16 @@ public abstract record LiteMutableEntity : LiteMutableEntity<long>
public abstract record LiteMutableEntity<T> : LiteImmutableEntity<T>, IFieldModifiedTime public abstract record LiteMutableEntity<T> : LiteImmutableEntity<T>, IFieldModifiedTime
where T : IEquatable<T> where T : IEquatable<T>
{ {
/// <inheritdoc cref="EntityBase{T}.Id" /> /// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)] [Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore] [CsvIgnore]
public override T Id { get; init; } public override T Id { get; init; }
/// <inheritdoc cref="IFieldModifiedTime.ModifiedTime" /> /// <summary>
/// 修改时间
/// </summary>
[Column(ServerTime = DateTimeKind.Local, CanInsert = false, Position = -1)] [Column(ServerTime = DateTimeKind.Local, CanInsert = false, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]

View File

@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
/// <inheritdoc /> /// <inheritdoc />
public abstract record LiteVersionEntity : LiteVersionEntity<long> public abstract record LiteVersionEntity : LiteVersionEntity<long>
{ {
/// <inheritdoc cref="EntityBase{T}.Id" /> /// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)] [Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore] [CsvIgnore]
[Snowflake] [Snowflake]
@ -16,13 +18,17 @@ public abstract record LiteVersionEntity : LiteVersionEntity<long>
public abstract record LiteVersionEntity<T> : LiteMutableEntity<T>, IFieldVersion public abstract record LiteVersionEntity<T> : LiteMutableEntity<T>, IFieldVersion
where T : IEquatable<T> where T : IEquatable<T>
{ {
/// <inheritdoc cref="EntityBase{T}.Id" /> /// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)] [Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore] [CsvIgnore]
[Snowflake] [Snowflake]
public override T Id { get; init; } public override T Id { get; init; }
/// <inheritdoc cref="IFieldVersion.Version" /> /// <summary>
/// 数据版本
/// </summary>
[Column(IsVersion = true, Position = -1)] [Column(IsVersion = true, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]

View File

@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
/// <inheritdoc /> /// <inheritdoc />
public abstract record MutableEntity : MutableEntity<long> public abstract record MutableEntity : MutableEntity<long>
{ {
/// <inheritdoc cref="EntityBase{T}.Id" /> /// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)] [Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore] [CsvIgnore]
[Snowflake] [Snowflake]
@ -16,30 +18,40 @@ public abstract record MutableEntity : MutableEntity<long>
public abstract record MutableEntity<T> : LiteMutableEntity<T>, IFieldCreatedUser, IFieldModifiedUser public abstract record MutableEntity<T> : LiteMutableEntity<T>, IFieldCreatedUser, IFieldModifiedUser
where T : IEquatable<T> where T : IEquatable<T>
{ {
/// <inheritdoc /> /// <summary>
/// 创建者编号
/// </summary>
[Column(CanUpdate = false, Position = -1)] [Column(CanUpdate = false, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual long? CreatedUserId { get; init; } public virtual long? CreatedUserId { get; init; }
/// <inheritdoc /> /// <summary>
/// 创建者用户名
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)] [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string CreatedUserName { get; init; } public virtual string CreatedUserName { get; init; }
/// <inheritdoc cref="EntityBase{T}.Id" /> /// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)] [Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore] [CsvIgnore]
public override T Id { get; init; } public override T Id { get; init; }
/// <inheritdoc cref="IFieldModifiedUser.ModifiedUserId" /> /// <summary>
/// 修改者编号
/// </summary>
[Column(CanInsert = false, Position = -1)] [Column(CanInsert = false, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public long? ModifiedUserId { get; init; } public long? ModifiedUserId { get; init; }
/// <inheritdoc cref="IFieldModifiedUser.ModifiedUserName" /> /// <summary>
/// 修改者用户名
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanInsert = false, Position = -1)] [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanInsert = false, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]

View File

@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
/// <inheritdoc /> /// <inheritdoc />
public abstract record SimpleEntity : SimpleEntity<long> public abstract record SimpleEntity : SimpleEntity<long>
{ {
/// <inheritdoc cref="EntityBase{T}.Id" /> /// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)] [Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore] [CsvIgnore]
[Snowflake] [Snowflake]

View File

@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
/// <inheritdoc /> /// <inheritdoc />
public abstract record VersionEntity : VersionEntity<long> public abstract record VersionEntity : VersionEntity<long>
{ {
/// <inheritdoc cref="EntityBase{T}.Id" /> /// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)] [Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore] [CsvIgnore]
[Snowflake] [Snowflake]
@ -16,30 +18,40 @@ public abstract record VersionEntity : VersionEntity<long>
public abstract record VersionEntity<T> : LiteVersionEntity<T>, IFieldModifiedUser, IFieldCreatedUser public abstract record VersionEntity<T> : LiteVersionEntity<T>, IFieldModifiedUser, IFieldCreatedUser
where T : IEquatable<T> where T : IEquatable<T>
{ {
/// <inheritdoc /> /// <summary>
/// 创建者编号
/// </summary>
[Column(CanUpdate = false, Position = -1)] [Column(CanUpdate = false, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual long? CreatedUserId { get; init; } public virtual long? CreatedUserId { get; init; }
/// <inheritdoc /> /// <summary>
/// 创建者用户名
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)] [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string CreatedUserName { get; init; } public virtual string CreatedUserName { get; init; }
/// <inheritdoc cref="EntityBase{T}.Id" /> /// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)] [Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore] [CsvIgnore]
public override T Id { get; init; } public override T Id { get; init; }
/// <inheritdoc cref="IFieldModifiedUser.ModifiedUserId" /> /// <summary>
/// 修改者编号
/// </summary>
[Column(CanInsert = false, Position = -1)] [Column(CanInsert = false, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual long? ModifiedUserId { get; init; } public virtual long? ModifiedUserId { get; init; }
/// <inheritdoc cref="IFieldModifiedUser.ModifiedUserName" /> /// <summary>
/// 修改者用户名
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanInsert = false, Position = -1)] [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanInsert = false, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]

View File

@ -8,6 +8,7 @@ public record RestfulInfo<T> : DataAbstraction
/// <summary> /// <summary>
/// 代码 /// 代码
/// </summary> /// </summary>
/// <example>succeed</example>
[JsonIgnore(Condition = JsonIgnoreCondition.Never)] [JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public ErrorCodes Code { get; init; } public ErrorCodes Code { get; init; }
@ -17,7 +18,8 @@ public record RestfulInfo<T> : DataAbstraction
public T Data { get; init; } public T Data { get; init; }
/// <summary> /// <summary>
/// 消息 /// 字符串:"消息内容",或数组:[{"参数名1":"消息内容1"},{"参数名2":"消息内容2"}]
/// </summary> /// </summary>
/// <example>请求成功</example>
public object Msg { get; init; } public object Msg { get; init; }
} }

View File

@ -1,11 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<DefineConstants>DBTYPE_SQLITE</DefineConstants>
</PropertyGroup>
<Import Project="$(SolutionDir)/build/code.quality.props"/> <Import Project="$(SolutionDir)/build/code.quality.props"/>
<ItemGroup>
<Content Include="$(SolutionDir)/assets/seed-data/**" LinkBase="SeedData" CopyToOutputDirectory="PreserveNewest"/>
</ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="../NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj"/> <ProjectReference Include="../NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj"/>
</ItemGroup> </ItemGroup>

View File

@ -1,13 +1,5 @@
global using NetAdmin.Domain.Attributes; global using NetAdmin.Domain.Attributes;
global using NetAdmin.Domain.Attributes.DataValidation;
global using NetAdmin.Domain.DbMaps.Dependency; global using NetAdmin.Domain.DbMaps.Dependency;
global using NetAdmin.Domain.DbMaps.Dependency.Fields; global using NetAdmin.Domain.DbMaps.Dependency.Fields;
global using NetAdmin.Domain.DbMaps.Sys;
global using NetAdmin.Domain.Dto.Dependency;
global using NetAdmin.Domain.Enums.Sys;
global using CsvIgnore = CsvHelper.Configuration.Attributes.IgnoreAttribute; global using CsvIgnore = CsvHelper.Configuration.Attributes.IgnoreAttribute;
global using CsvIndex = CsvHelper.Configuration.Attributes.IndexAttribute; global using DynamicFilterOperators = NetAdmin.Domain.Enums.DynamicFilterOperators;
global using CsvName = CsvHelper.Configuration.Attributes.NameAttribute;
global using DynamicFilterOperators = NetAdmin.Domain.Enums.DynamicFilterOperators;
global using HttpMethods = NetAdmin.Domain.Enums.HttpMethods;
global using SqlIndex = FreeSql.DataAnnotations.IndexAttribute;

View File

@ -1,9 +1,11 @@
using NetAdmin.Application.Modules.Tpl;
using NetAdmin.Application.Services.Tpl.Dependency;
using NetAdmin.Cache.Tpl.Dependency;
using NetAdmin.Domain.Dto.Dependency;
using NetAdmin.Domain.Dto.Tpl.Example; using NetAdmin.Domain.Dto.Tpl.Example;
using NetAdmin.SysComponent.Application.Modules.Tpl; using NetAdmin.Host.Attributes;
using NetAdmin.SysComponent.Application.Services.Tpl.Dependency;
using NetAdmin.SysComponent.Cache.Tpl.Dependency;
namespace NetAdmin.SysComponent.Host.Controllers.Tpl; namespace NetAdmin.Host.Controllers.Tpl;
/// <summary> /// <summary>
/// 示例服务 /// 示例服务

View File

@ -1,12 +1,7 @@
using Furion.Logging; using Gurion.Logging;
using NetAdmin.Domain.Contexts; using NetAdmin.Domain.Contexts;
using NetAdmin.Domain.Events;
using NetAdmin.Host.Filters;
using NetAdmin.Host.Utils;
using StackExchange.Redis; using StackExchange.Redis;
using Yitter.IdGenerator; using Yitter.IdGenerator;
using FreeSqlBuilder = NetAdmin.Infrastructure.Utils.FreeSqlBuilder;
#if DEBUG #if DEBUG
using Spectre.Console; using Spectre.Console;
#endif #endif
@ -83,7 +78,7 @@ public static class ServiceCollectionExtensions
this IServiceCollection me) this IServiceCollection me)
{ {
var optionsTypes var optionsTypes
= from type in App.EffectiveTypes.Where(x => !x.IsAbstract && !x.FullName!.Contains(nameof(Furion)) && = from type in App.EffectiveTypes.Where(x => !x.IsAbstract && !x.FullName!.Contains(nameof(Gurion)) &&
x.GetInterfaces().Contains(typeof(IConfigurableOptions))) x.GetInterfaces().Contains(typeof(IConfigurableOptions)))
select type; select type;
@ -126,12 +121,11 @@ public static class ServiceCollectionExtensions
} }
/// <summary> /// <summary>
/// 添加上下文用户 /// 添加上下文用户令牌
/// </summary> /// </summary>
public static IServiceCollection AddContextUser(this IServiceCollection me) public static IServiceCollection AddContextUserToken(this IServiceCollection me)
{ {
return me.AddScoped(typeof(ContextUserToken), _ => ContextUserToken.Create()) return me.AddScoped(typeof(ContextUserToken), _ => ContextUserToken.Create());
.AddScoped(typeof(ContextUserInfo), _ => ContextUserInfo.Create());
} }
/// <summary> /// <summary>
@ -142,42 +136,6 @@ public static class ServiceCollectionExtensions
return me.AddEventBus(builder => builder.AddSubscribers(App.Assemblies.ToArray())); return me.AddEventBus(builder => builder.AddSubscribers(App.Assemblies.ToArray()));
} }
/// <summary>
/// 添加 freeSql orm工具
/// </summary>
public static IServiceCollection AddFreeSql( //
this IServiceCollection me, FreeSqlInitMethods initMethods = FreeSqlInitMethods.None, Action<IFreeSql> freeSqlConfig = null)
{
// // 非调试模式下禁止同步数据库
// #if !DEBUG
// initOptions = FreeSqlInitOptions.None;
// #endif
var dbOptions = App.GetOptions<DatabaseOptions>();
var fSql = new FreeSqlBuilder(dbOptions).Build(initMethods);
_ = me.AddSingleton(fSql);
fSql.Aop.AuditValue += SqlAuditor.DataAuditHandler; // Insert/Update自动值处理
var eventPublisher = App.GetService<IEventPublisher>();
#pragma warning disable VSTHRD110
// AOP事件发布异步
fSql.Aop.CommandBefore += (_, e) => eventPublisher.PublishAsync(new SqlCommandBeforeEvent(e)); // 增删查改,执行命令之前触发
fSql.Aop.CommandAfter += (_, e) => eventPublisher.PublishAsync(new SqlCommandAfterEvent(e)); // 增删查改,执行命令完成后触发
fSql.Aop.SyncStructureBefore += (_, e) => eventPublisher.PublishAsync(new SyncStructureBeforeEvent(e)); // CodeFirst迁移执行之前触发
fSql.Aop.SyncStructureAfter += (_, e) => eventPublisher.PublishAsync(new SyncStructureAfterEvent(e)); // CodeFirst迁移执行完成触发
#pragma warning restore VSTHRD110
// 全局过滤器设置
freeSqlConfig?.Invoke(fSql);
return me.AddScoped<UnitOfWorkManager>() // 注入工作单元管理器
.AddFreeRepository(null, App.Assemblies.ToArray()) // 批量注入 Repository
.AddMvcFilter<TransactionInterceptor>(); // 注入事务拦截器
}
/// <summary> /// <summary>
/// 添加内存缓存 /// 添加内存缓存
/// </summary> /// </summary>

View File

@ -1,4 +1,4 @@
using Furion.FriendlyException; using Gurion.FriendlyException;
using NetAdmin.Domain.Dto; using NetAdmin.Domain.Dto;
namespace NetAdmin.Host.Filters; namespace NetAdmin.Host.Filters;

View File

@ -1,4 +1,4 @@
using Furion.FriendlyException; using Gurion.FriendlyException;
using NetAdmin.Domain.Dto; using NetAdmin.Domain.Dto;
namespace NetAdmin.Host.Filters; namespace NetAdmin.Host.Filters;

View File

@ -1,8 +1,8 @@
using Furion.FriendlyException; using Gurion.FriendlyException;
namespace NetAdmin.Host.Filters; namespace NetAdmin.Host.Filters;
/// <inheritdoc cref="Furion.FriendlyException.IGlobalExceptionHandler" /> /// <inheritdoc cref="Gurion.FriendlyException.IGlobalExceptionHandler" />
public sealed class GlobalExceptionHandler(ILogger<GlobalExceptionHandler> logger) : IGlobalExceptionHandler, ISingleton public sealed class GlobalExceptionHandler(ILogger<GlobalExceptionHandler> logger) : IGlobalExceptionHandler, ISingleton
{ {
/// <inheritdoc /> /// <inheritdoc />

View File

@ -0,0 +1,56 @@
namespace NetAdmin.Infrastructure.Attributes;
/// <summary>
/// 国家信息特性
/// </summary>
/// <remarks>
/// https://github.com/countries/countries
/// </remarks>
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Enum)]
public sealed class CountryAttribute : Attribute
{
/// <summary>
/// 三个字母的国家代码
/// </summary>
public string Alpha3 { get; set; }
/// <summary>
/// 国际电话呼号
/// </summary>
public int CallingCode { get; set; }
/// <summary>
/// 国际电话子呼号(区分同一呼号不同国家)
/// </summary>
public string CallingSubCode { get; set; }
/// <summary>
/// 货币代码
/// </summary>
public string CurrencyCode { get; set; }
/// <summary>
/// 当命中多个国家时的首选国家
/// </summary>
public bool IsPreferred { get; set; }
/// <summary>
/// 官方语言代码
/// </summary>
public string Languages { get; set; }
/// <summary>
/// 国家全称
/// </summary>
public string LongName { get; set; }
/// <summary>
/// 国家简称
/// </summary>
public string ShortName { get; set; }
/// <summary>
/// 非正式名称
/// </summary>
public string UnofficialNames { get; set; }
}

View File

@ -0,0 +1,13 @@
namespace NetAdmin.Infrastructure.Attributes;
/// <summary>
/// 域名特性
/// </summary>
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Enum)]
public sealed class DomainAttribute : Attribute
{
/// <summary>
/// 主机名称
/// </summary>
public string HostName { get; init; }
}

View File

@ -0,0 +1,17 @@
namespace NetAdmin.Infrastructure.Configuration.Dependency;
/// <summary>
/// API客户端基础选项
/// </summary>
public abstract record ApiClientOptions : OptionAbstraction
{
/// <summary>
/// 网关地址
/// </summary>
public string Gateway { get; set; }
/// <summary>
/// 密钥
/// </summary>
public string Token { get; set; }
}

View File

@ -1,4 +1,4 @@
namespace NetAdmin.Infrastructure.Configuration.Options; namespace NetAdmin.Infrastructure.Configuration.Dependency;
/// <summary> /// <summary>
/// 选项抽象基类 /// 选项抽象基类

View File

@ -1,3 +1,5 @@
using NetAdmin.Infrastructure.Configuration.Dependency;
namespace NetAdmin.Infrastructure.Configuration.Options; namespace NetAdmin.Infrastructure.Configuration.Options;
/// <summary> /// <summary>

View File

@ -1,3 +1,4 @@
using NetAdmin.Infrastructure.Configuration.Dependency;
using DataType = FreeSql.DataType; using DataType = FreeSql.DataType;
namespace NetAdmin.Infrastructure.Configuration.Options; namespace NetAdmin.Infrastructure.Configuration.Options;

View File

@ -1,3 +1,5 @@
using NetAdmin.Infrastructure.Configuration.Dependency;
namespace NetAdmin.Infrastructure.Configuration.Options; namespace NetAdmin.Infrastructure.Configuration.Options;
/// <summary> /// <summary>

View File

@ -1,3 +1,5 @@
using NetAdmin.Infrastructure.Configuration.Dependency;
namespace NetAdmin.Infrastructure.Configuration.Options; namespace NetAdmin.Infrastructure.Configuration.Options;
/// <summary> /// <summary>

View File

@ -74,14 +74,10 @@ public static class Chars
public const string FLG_HTTP_METHOD_PUT = "PUT"; public const string FLG_HTTP_METHOD_PUT = "PUT";
public const string FLG_HTTP_METHOD_TRACE = "TRACE"; public const string FLG_HTTP_METHOD_TRACE = "TRACE";
public const string FLG_PATH_API_METRICS = "metrics"; public const string FLG_PATH_API_METRICS = "metrics";
public const string FLG_PATH_API_RPOBE = "api/probe";
public const string FLG_PATH_API_RPOBE = "api/probe"; public const string FLG_PATH_WEBSOCKET_PREFIX = "ws";
public const string FLG_PATH_API_SYS_USER_LOGIN_BY_PWD = "api/sys/user/login.by.pwd"; public const string FLG_REDIS_INSTANCE_DATA_CACHE = "DataCache";
public const string FLG_PATH_WEBSOCKET_PREFIX = "ws"; public const string FLG_SNOWFLAKE_WORK_ID = "SNOWFLAKE_WORK_ID";
public const string FLG_RANDOM_UNAME_PWD = "VcXlp7WY";
public const string FLG_REDIS_INSTANCE_DATA_CACHE = "DataCache";
public const string FLG_SNOWFLAKE_WORK_ID = "SNOWFLAKE_WORK_ID";
public const string FLG_SYSTEM_PREFIX = "sc_";
public const string FLGL_HTTP_HEADER_VALUE_UA_MOBILE public const string FLGL_HTTP_HEADER_VALUE_UA_MOBILE
= "Mozilla/5.0 (Linux; Android 9; Redmi Note 8 Pro Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.96 Mobile Safari/537.36"; = "Mozilla/5.0 (Linux; Android 9; Redmi Note 8 Pro Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.96 Mobile Safari/537.36";

View File

@ -10,26 +10,14 @@ namespace NetAdmin.Infrastructure.Constant;
/// </remarks> /// </remarks>
public static class Numbers public static class Numbers
{ {
public const int DEF_PAGE_SIZE_QUERY = 20; // 分页查询默认的页容量 public const int DEF_PAGE_SIZE_QUERY = 20; // 默认值:分页查询页容量
public const long DEF_SORT_VAL = 100; // 排序默认值 public const int HTTP_STATUS_BIZ_FAIL = 900; // HTTP状态码业务异常
public const int MAX_LIMIT_BULK_REQ = 100; // 最大限制:批量请求数
public const int HTTP_STATUS_BIZ_FAIL = 900; // Http状态码-业务异常 public const int MAX_LIMIT_EXPORT = 50000; // 最大限制导出为CSV文件的条数
public const long ID_DIC_CATALOG_GEO_AREA = 379794295185413; // 唯一编号:字典目录-行政区划字典 public const int MAX_LIMIT_QUERY = 1000; // 最大限制:非分页查询条数
public const int MAX_LIMIT_QUERY_PAGE_NO = 10000; // 最大限制:分页查询页码
public const int MAX_LIMIT_BULK_REQ = 100; // 最大限制:批量请求数 public const int MAX_LIMIT_QUERY_PAGE_SIZE = 100; // 最大限制:分页查询页容量
public const int MAX_LIMIT_EXPORT = 10000; // 最大限制:导出为CSV文件的条 public const int MAX_LIMIT_RETRY_CNT_REDIS_LOCK = 10; // 最大限制:Redis锁重试次
public const int MAX_LIMIT_QUERY = 1000; // 最大限制:非分页查询条数 public const int SECS_REDIS_LOCK_EXPIRY = 60; // 秒Redis锁过期时间
public const int MAX_LIMIT_QUERY_PAGE_NO = 10000; // 最大限制:分页查询页码 public const int SECS_REDIS_LOCK_RETRY_DELAY = 1; // 秒Redis锁重试间隔
public const int MAX_LIMIT_QUERY_PAGE_SIZE = 100; // 最大限制:分页查询页容量
public const int MAX_LIMIT_RETRY_CNT_REDIS_LOCK = 10; // 最大限制Redis锁重试次数
public const int REQUEST_LOG_BUFF_SIZE = 10; // 请求日志缓冲区大小
public const int SCHEDULED_JOB_PARALLEL_NUM = 5; // 计划作业并发数
public const int SECS_CACHE_CHART = 300; // 秒:缓存时间-仪表
public const int SECS_CACHE_DEFAULT = 60; // 秒:缓存时间-默认
public const int SECS_CACHE_DIC_CATALOG_CODE = 300; // 秒:缓存时间-字典配置-目录代码
public const int SECS_CACHE_LOGIN_BY_USER_ID = 3600 * 24 * 30; // 秒:缓存时间-通过用户编号登录的用户信息
public const int SECS_REDIS_LOCK_EXPIRY = 60; // 秒Redis锁过期时间
public const int SECS_REDIS_LOCK_RETRY_DELAY = 1; // 秒Redis锁重试间隔
public const int SECS_TIMEOUT_HTTP_CLIENT = 15; // 秒:超时时间-默认HTTP客户端
public const int SECS_TIMEOUT_JOB = 600; // 秒:超时时间-作业
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,5 @@
// ReSharper disable IdentifierTypo // ReSharper disable IdentifierTypo
// ReSharper disable UnusedMember.Global
namespace NetAdmin.Infrastructure.Enums; namespace NetAdmin.Infrastructure.Enums;

View File

@ -35,11 +35,6 @@ public static class GlobalStatic
/// </summary> /// </summary>
public static DateTime LatestLogTime => LogCounterOff ? DateTime.MinValue : Volatile.Read(ref _latestLogTime).Time(); public static DateTime LatestLogTime => LogCounterOff ? DateTime.MinValue : Volatile.Read(ref _latestLogTime).Time();
/// <summary>
/// 日志记录器忽略的API编号
/// </summary>
public static string[] LoggerIgnoreApiIds => ["api/adm/tools/query.es.log", "api/probe/health.check", "api/probe/is.system.safety.stopped"];
/// <summary> /// <summary>
/// 系统内部密钥 /// 系统内部密钥
/// </summary> /// </summary>

View File

@ -5,16 +5,36 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="FreeSql.DbContext.NS" Version="3.2.833-ns4"/> <PackageReference Include="FreeSql.DbContext.NS" Version="3.2.833-ns4"/>
<PackageReference Include="FreeSql.Provider.Sqlite.NS" Version="3.2.833-ns4"/> <PackageReference Include="FreeSql.Provider.Sqlite.NS" Version="3.2.833-ns4"/>
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.5.8"/> <PackageReference Include="Gurion" Version="1.1.0"/>
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster.NS" Version="4.9.5.8-ns1"/>
<PackageReference Include="Furion.Pure.NS" Version="4.9.5.8-ns1"/>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.11.0"/> <PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.11.0"/>
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="9.0.0-rc.2.24474.3"/> <PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="9.0.0-rc.2.24474.3"/>
<PackageReference Include="Minio" Version="6.0.3"/> <PackageReference Include="Minio" Version="6.0.3"/>
<PackageReference Include="NSExt" Version="2.2.0"/> <PackageReference Include="NSExt" Version="2.2.0"/>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3"/>
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="2.1.4"/> <PackageReference Include="SixLabors.ImageSharp.Drawing" Version="2.1.4"/>
<PackageReference Include="System.Drawing.Common" Version="9.0.0-rc.2.24474.1"/> <PackageReference Include="System.Drawing.Common" Version="9.0.0-rc.2.24474.1"/>
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Include="$(SolutionDir)/assets/res/NetAdmin.Statements.ln">
<Link>Languages/NetAdmin.Statements.ln</Link>
</None>
<None Include="$(SolutionDir)/assets/res/Nations.ln">
<Link>Languages/Nations.ln</Link>
</None>
<None Include="$(SolutionDir)/assets/res/NetAdmin.Fields.ln">
<Link>Languages/NetAdmin.Fields.ln</Link>
</None>
<None Include="$(SolutionDir)/assets/res/CountryCodes.ln">
<Link>Languages/CountryCodes.ln</Link>
</None>
<EmbeddedResource Include="$(SolutionDir)/assets/res/Ln.resx">
<Link>Languages/Ln.resx</Link>
<Generator>PublicResXFileCodeGenerator</Generator>
</EmbeddedResource>
<Compile Include="$(SolutionDir)/dist/backend/$(ProjectName)/Ln.Designer.cs">
<Link>Languages/Ln.Designer.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup> <ItemGroup>
<None Update="*.json"> <None Update="*.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

View File

@ -3,13 +3,5 @@
"AppSettings": { "AppSettings": {
"InjectSpecificationDocument": true, "InjectSpecificationDocument": true,
"InjectMiniProfiler": true "InjectMiniProfiler": true
},
"JWTSettings": {
"ExpiredTime": 20000
},
"Logging": {
"LogLevel": {
"Default": "Debug",
},
} }
} }

View File

@ -3,13 +3,5 @@
"AppSettings": { "AppSettings": {
"InjectSpecificationDocument": true, "InjectSpecificationDocument": true,
"InjectMiniProfiler": true "InjectMiniProfiler": true
}, }
"JWTSettings": {
"ExpiredTime": 20000
},
"Logging": {
"LogLevel": {
"Default": "Debug",
},
},
} }

View File

@ -0,0 +1,7 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"AppSettings": {
"InjectSpecificationDocument": true,
"InjectMiniProfiler": true
}
}

View File

@ -0,0 +1,143 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
// App基本配置
"AppSettings": {
"InjectSpecificationDocument": false,
"InjectMiniProfiler": false
},
// Swagger文档配置 ------------------------------------------------------------------------------
"SpecificationDocumentSettings": {
"EnableEnumSchemaFilter": false,
"EnableAuthorized": false,
"RoutePrefix": "swagger",
"SecurityDefinitions": [
{
"Id": "Bearer",
"Type": "ApiKey",
"Name": "Authorization",
"Description": "JWT Authorization header using the Bearer scheme.",
"BearerFormat": "JWT",
"Scheme": "bearer",
"In": "Header",
"Requirement": {
"Scheme": {
"Reference": {
"Id": "Bearer",
"Type": "SecurityScheme"
},
"Accesses": []
}
}
}
],
},
// 验证码配置 --------------------------------------------------------------------------------------------------------
"Captcha": {
"ImageRelativePath": ".data/captcha",
"SecretKey": "1Z?f(2)%v?:X5NYRl+]PSi.rDf7Ip#lB"
},
// 跨域配置 ----------------------------------------------------------------------------------------------------------
"CorsAccessorSettings": {
"WithExposedHeaders": [
"access-token",
"x-access-token",
"content-disposition"
]
},
// 动态webapi配置 ----------------------------------------------------------------------------------------------------
"DynamicApiControllerSettings": {
"VerbToHttpMethods": [
[
"post",
"POST"
],
[
"add",
"POST"
],
[
"create",
"POST"
],
[
"insert",
"POST"
],
[
"submit",
"POST"
],
[
"get",
"POST"
],
[
"find",
"POST"
],
[
"fetch",
"POST"
],
[
"query",
"POST"
],
[
"getlist",
"POST"
],
[
"getall",
"POST"
],
[
"put",
"POST"
],
[
"update",
"POST"
],
[
"delete",
"POST"
],
[
"remove",
"POST"
],
[
"clear",
"POST"
],
[
"patch",
"POST"
]
],
"CamelCaseSeparator": ".",
"UrlParameterization": true,
"KeepVerb": true,
"AbandonControllerAffixes": [
"Controller"
]
},
// 友好异常配置 -------------------------------------------------------------------------------------------------------
"FriendlyExceptionSettings": {
"LogError": false
},
// 日志配置 ----------------------------------------------------------------------------------------------------------
"Logging": {
"Monitor": {
"GlobalEnabled": false,
"ReturnValueThreshold": 1000
}
},
// UnifyResultSettings 规范化配置 ------------------------------------------------------------------------------------
"UnifyResultSettings": {
"Return200StatusCodes": [
999
]
},
}

View File

@ -1 +1 @@
global using Furion.RemoteRequest; global using Gurion.RemoteRequest;

View File

@ -1,3 +1,6 @@
#if DBTYPE_SQLSERVER
using Microsoft.Data.SqlClient;
#endif
using Newtonsoft.Json; using Newtonsoft.Json;
using DataType = FreeSql.DataType; using DataType = FreeSql.DataType;
@ -13,10 +16,16 @@ public sealed class FreeSqlBuilder(DatabaseOptions databaseOptions)
/// </summary> /// </summary>
public IFreeSql Build(FreeSqlInitMethods initMethods) public IFreeSql Build(FreeSqlInitMethods initMethods)
{ {
var freeSql = new FreeSql.FreeSqlBuilder().UseConnectionString(databaseOptions.DbType, databaseOptions.ConnStr) var freeSql = new FreeSql.FreeSqlBuilder()
.UseGenerateCommandParameterWithLambda(true) #if DBTYPE_SQLSERVER
.UseAutoSyncStructure(initMethods.HasFlag(FreeSqlInitMethods.SyncStructure)) .UseConnectionFactory(databaseOptions.DbType, () => new SqlConnection(databaseOptions.ConnStr))
.Build(); .UseAdoConnectionPool(true)
#else
.UseConnectionString(databaseOptions.DbType, databaseOptions.ConnStr)
#endif
.UseGenerateCommandParameterWithLambda(true)
.UseAutoSyncStructure(initMethods.HasFlag(FreeSqlInitMethods.SyncStructure))
.Build();
_ = InitDbAsync(freeSql, initMethods); // 初始化数据库 ,异步 _ = InitDbAsync(freeSql, initMethods); // 初始化数据库 ,异步
return freeSql; return freeSql;
} }

View File

@ -19,7 +19,7 @@ public sealed class XmlCommentReader : ISingleton
var xmlComments = specificationDocumentSettings.Value.XmlComments // var xmlComments = specificationDocumentSettings.Value.XmlComments //
?? App.GetConfig<SpecificationDocumentSettingsOptions>(nameof(SpecificationDocumentSettingsOptions).TrimSuffixOptions()) ?? App.GetConfig<SpecificationDocumentSettingsOptions>(nameof(SpecificationDocumentSettingsOptions).TrimSuffixOptions())
.XmlComments; .XmlComments;
foreach (var commentFile in xmlComments.Where(x => x.Contains(nameof(NetAdmin)))) { foreach (var commentFile in xmlComments) {
var xmlDoc = new XmlDocument(); var xmlDoc = new XmlDocument();
var xmlFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, commentFile); var xmlFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, commentFile);
if (!File.Exists(xmlFilePath)) { if (!File.Exists(xmlFilePath)) {

View File

@ -1,332 +0,0 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
// App基本配置
"AppSettings": {
// AppSettings配置根节点
// InjectMiniProfiler是否注入 MiniProfilerbool 类型,默认 true关闭 Swagger 左上角监听
// InjectSpecificationDocument是否启用 Swagger 文档bool 类型,默认 true生产环境可关闭
// EnabledReferenceAssemblyScan是否启用通过 dll 方式添加的引用程序集扫描bool 类型,默认 false
// ExternalAssemblies配置外部程序集完整路径支持动态加载string[] 类型,默认 []
// PrintDbConnectionInfo是否打印数据库连接信息到 MiniProfiler 中bool 类型,默认 true
// SupportPackageNamePrefixs配置支持的包前缀名string[] 类型,默认 []
// OutputOriginalSqlExecuteLog是否输出原始 Sql 执行日志ADO.NET默认 true
// VirtualPath配置虚拟目录必须以 / 开头
"InjectSpecificationDocument": false,
"InjectMiniProfiler": false
},
// Swagger文档配置 ------------------------------------------------------------------------------
"SpecificationDocumentSettings": {
// DocumentTitle文档标题string默认 Specification Api Document
// DefaultGroupName默认分组名string默认 Default
// EnableAuthorized是否启用权限控制bool默认 true
// FormatAsV2采用 Swagger 2.0 版本bool默认 false 已弃用
// RoutePrefix规范化文档地址string默认 api如果希望在首页改为空字符串即可。
// DocExpansionState文档显示方式DocExpansion默认 List取值
// List列表式展开子类默认值
// Full完全展开
// None列表式不展开子类
// XmlComments程序集注释描述文件名可带 .xmlstring默认 Furion.Application, Furion.Web.Entry, Furion.Web.Core
// GroupOpenApiInfos分组信息配置SpecificationOpenApiInfo[],默认 { 'Group': 'Default'}
// SecurityDefinitions安全策略定义配置SpecificationOpenApiSecurityScheme[],默认 []
// Servers配置 Server 下拉列表OpenApiServer[] 类型,默认 [],如:{Servers:[ { Url:"地址", Description:"描述"} ]}
// HideServers是否隐藏 Server 下拉列表bool 类型,默认 true
// RouteTemplate配置文档 swagger.json 路由模板默认模板swagger/{documentName}/swagger.json, {documentName} 代表分组名,必须保留原样
// PackagesGroups配置模块化内置分组名称string[] 类型,默认 []
// EnableEnumSchemaFilter启用枚举 Schema 筛选器bool 类型,默认 true
// EnableTagsOrderDocumentFilter启用标签排序筛选器bool 类型,默认 true
// ServerDir配置 IIS 添加 Application 部署名string 类型,默认空,仅在 Furion v3.2.0+` 有效
// LoginInfo配置 Swagger 是否需要登录才能访问SpecificationLoginInfo 类型,默认 null仅在 Furion v3.3.3+` 有效
// Enabled是否启用登录授权默认 false
// CheckUrl检查登录状态的 Url 地址,该地址必须是 POST 请求,已授权返回 200否则返回 401
// SubmitUrl提交登录的 Url 地址,该地址必须是 POST 请求且只有一个 SpecificationAuth 类型参数,成功登录返回 200否则返回 401支持相对地址以 / 开头
// EnableAllGroups启用 Swagger 总分组功能,自动将所有分组的接口合并到 All Groups 中bool 类型,默认 false仅在 Furion v3.3.4+` 有效
// 另外 SpecificationOpenApiInfo 内置配置如下:
//
// Group分组唯一标识string 类型,必填
// Order分组排序int 类型,数字越大排前面,默认 0
// Visible配置分组是否可见bool 类型,默认 true
// Title配置分组标题string 类型
// Description配置分组描述string 类型
// Version配置分组版本默认 1.0
// TermsOfService配置相关链接地址Uri 类型
// Contact配置联系方式OpenApiContact 类型
// License配置协议OpenApiLicense 类型
"EnableEnumSchemaFilter": false,
"EnableAuthorized": false,
"RoutePrefix": "swagger",
"XmlComments": [
"FreeSql.xml",
"NetAdmin.AdmServer.Application.xml",
"NetAdmin.AdmServer.Cache.xml",
"NetAdmin.AdmServer.Host.xml",
"NetAdmin.Application.xml",
"NetAdmin.Cache.xml",
"NetAdmin.Domain.xml",
"NetAdmin.Host.xml",
"NetAdmin.Infrastructure.xml",
"NetAdmin.ScheduledService.xml",
"NetAdmin.SysComponent.Application.xml",
"NetAdmin.SysComponent.Cache.xml",
"NetAdmin.SysComponent.Host.xml",
]
},
// 验证码配置 --------------------------------------------------------------------------------------------------------
"Captcha": {
"ImageRelativePath": ".data/captcha",
"SecretKey": "1Z?f(2)%v?:X5NYRl+]PSi.rDf7Ip#lB"
},
// 跨域配置 ----------------------------------------------------------------------------------------------------------
"CorsAccessorSettings": {
// CorsAccessorSettings
// PolicyName跨域策略名string 类型,必填,默认 App.Cors.Policy
// WithOrigins允许跨域的域名列表string[] 类型,默认 *
// WithHeaders请求表头没有配置则允许所有表头string[] 类型
// WithExposedHeaders设置客户端可获取的响应标头string[] 类型,默认 ["access-token", "x-access-token"]
// WithMethods设置跨域允许请求谓词没有配置则允许所有string[] 类型
// AllowCredentials是否允许跨域请求中的凭据bool 类型,默认值 true
// SetPreflightMaxAge设置预检过期时间int 类型,默认值 24小时
// FixedClientToken是否默认配置 WithExposedHeadersbool 类型,默认 true
// SignalRSupport是否启用 SignalR 跨域支持bool 类型,默认 false
"WithExposedHeaders": [
"access-token",
"x-access-token",
"content-disposition"
]
},
// 数据库配置 --------------------------------------------------------------------------------------------------------
"Database": {
"DbType": "Sqlite",
"ConnStr": "data source=NetAdmin.db",
"SeedDataRelativePath": "SeedData"
},
// 动态webapi配置 ----------------------------------------------------------------------------------------------------
"DynamicApiControllerSettings": {
// 5.1.10 DynamicApiControllerSettings 配置
// Furion 还提供动态 WebAPI 接口一些全局配置选项,如:
//
// DefaultRoutePrefix默认路由前缀string默认 api
// DefaultHttpMethod默认请求谓词string默认POST
// DefaultModule默认模块名称区域可用作接口版本string默认v1
// LowercaseRoute小写路由格式bool默认true
// AsLowerCamelCase启用小驼峰命名首字母小写默认 false
// KeepVerb是否保留动作谓词bool默认false
// KeepName是否保留默认名称bool默认fasle
// CamelCaseSeparator骆驼(驼峰)/帕斯卡命名分隔符string默认-
// VersionSeparator版本分隔符string默认@
// ModelToQueryGET/HEAD 请求将 类类型参数转查询参数bool默认 false
// SupportedMvcController是否支持 Mvc Controller 动态配置bool默认 false
// UrlParameterization路由参数采用 [FromQuery] 化,默认 false[FromRoute] 方式)
// DefaultArea配置默认区域默认 null
// ForceWithRoutePrefix配置是否强制添加 DefaultRoutePrefix当控制器自定义了 [Route] 有效,仅限 v3.4.1+版本有效
// AbandonControllerAffixes默认去除控制器名称前后缀列表名string[],默认:
// AppServices
// AppService
// ApiController
// Controller
// Services
// Service
// AbandonActionAffixes默认去除动作方法名称前后缀列表名string[],默认:
// Async
// VerbToHttpMethods复写默认方法名转 [HttpMethod] 规则string[][] 二维数组类型,内置匹配规则为:
// ["post"] = "POST",
// ["add"] = "POST",
// ["create"] = "POST",
// ["insert"] = "POST",
// ["submit"] = "POST",
// ["get"] = "GET",
// ["find"] = "GET",
// ["fetch"] = "GET",
// ["query"] = "GET",
// ["getlist"] = "GET",
// ["getall"] = "GET",
// ["put"] = "PUT",
// ["update"] = "PUT",
// ["delete"] = "DELETE",
// ["remove"] = "DELETE",
// ["clear"] = "DELETE",
// ["patch"] = "PATCH"
//
// 复写示例
// "DynamicApiControllerSettings": {
// "VerbToHttpMethods": [
// [ "getall", "HEAD" ], // => getall 会被复写为 `[HttpHead]`
// [ "other", "PUT" ] // => 新增一条新规则,比如,一 `[other]` 开头会转换为 `[HttpPut]` 请求
// ]
// }
// "DefaultRoutePrefix": "rest",
"VerbToHttpMethods": [
[
"post",
"POST"
],
[
"add",
"POST"
],
[
"create",
"POST"
],
[
"insert",
"POST"
],
[
"submit",
"POST"
],
[
"get",
"POST"
],
[
"find",
"POST"
],
[
"fetch",
"POST"
],
[
"query",
"POST"
],
[
"getlist",
"POST"
],
[
"getall",
"POST"
],
[
"put",
"POST"
],
[
"update",
"POST"
],
[
"delete",
"POST"
],
[
"remove",
"POST"
],
[
"clear",
"POST"
],
[
"patch",
"POST"
]
],
"CamelCaseSeparator": ".",
"UrlParameterization": true,
"KeepVerb": true,
"AbandonControllerAffixes": [
"Controller"
],
},
// 友好异常配置 -------------------------------------------------------------------------------------------------------
"FriendlyExceptionSettings": {
// 7.15 FriendlyExceptionSettings 配置
// HideErrorCode隐藏错误码bool 类型,默认 false
// DefaultErrorCode默认错误码string 类型
// DefaultErrorMessage默认错误消息string 类型
// ThrowBah是否将 Oops.Oh 默认抛出为业务异常bool 类型,默认 false设置 true 之后 Oops.Oh 默认进入 OnValidateFailed 处理,而不是 OnException
// LogError是否输出异常日志bool 类型,默认 true
"LogError": false
},
// JWT鉴权配置 -------------------------------------------------------------------------------------------------------
"JWTSettings": {
"ValidateIssuerSigningKey": true,
// 是否验证密钥bool 类型默认true
"IssuerSigningKey": "bO0BCAGxpxYnm6AE4XpgO25T27NayFzjGgfDqBuzUzD6ROpFiZUi3KjVg93bdGek",
// 密钥string 类型必须是复杂密钥长度大于16
"ValidateIssuer": true,
// 是否验证签发方bool 类型默认true
"ValidIssuer": "签发方",
// 签发方string 类型
"ValidateAudience": true,
// 是否验证签收方bool 类型默认true
"ValidAudience": "签收方",
// 签收方string 类型
"ValidateLifetime": true,
// 是否验证过期时间bool 类型默认true建议true
"ExpiredTime": 20,
// 过期时间long 类型单位分钟默认20分钟
"ClockSkew": 5,
// 过期时间容错值long 类型,单位秒,默认 5秒
"Algorithm": "HS256"
// 加密算法string 类型,默认 HS256
},
// 日志配置 ----------------------------------------------------------------------------------------------------------
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"System.Logging.EventBusService": "Error"
},
"Monitor": {
"GlobalEnabled": false,
// 是否启用全局拦截,默认 `false`
// "IncludeOfMethods": [], // 是否指定拦截特定方法,当 GlobalEnabled: false 有效
// "ExcludeOfMethods": [], // 是否指定排除特定方法,当 GlobalEnabled: true 有效
// "BahLogLevel": "Information", // 配置 Oops.Oh 和 Oops.Bah 业务日志输出级别,默认 Information
// "WithReturnValue": true, // 配置是否包含返回值,默认 `true`Furion 4.3.9+ 有效
"ReturnValueThreshold": 1000
// 配置返回值字符串阈值,默认 0全量输出Furion 4.3.9+ 有效
// "JsonBehavior": "None", // 配置 LoggingMonitor Json 输出行为,默认 NoneFurion 4.5.2+ 有效
// "MethodsSettings": [
// // 配置被监视方法更多信息Furion 4.3.9+ 有效
// {
// "FullName": "Furion.Application.TestLoggerServices.MethodName", // 方法完全限定名
// "WithReturnValue": true, // 配置是否包含返回值,默认 `true`Furion 4.3.9+ 有效
// "ReturnValueThreshold": 0 // 配置返回值字符串阈值,默认 0全量输出Furion 4.3.9+ 有效
// }
// ]
}
},
// Redis配置 --------------------------------------------------------------------------------------------------------
"Redis": {
"Instances": [
// 数据缓存
{
"Name": "DataCache",
"ConnStr": "localhost:6379,abortConnect=false",
"DataBase": 0,
}
]
},
// UnifyResultSettings 规范化配置 ------------------------------------------------------------------------------------
"UnifyResultSettings": {
// Return200StatusCodes配置返回 200 状态码的请求int[] 类型,只支持 400+(404除外) 状态码篡改
// AdaptStatusCodes配置篡改状态码规则int[][] 类型,只支持 400+(404除外) 状态码篡改
// SupportMvcController是否支持 MVC 控制台规范化处理bool 类型,默认 false
"Return200StatusCodes": [
999
],
},
// 文件上传配置 -------------------------------------------------------------------------------------------------------
"Upload": {
"ContentTypes": [
"image/jpg",
"image/png",
"image/jpeg",
"image/gif"
],
"MaxSize": 1073741824,
"Minio": {
"ServerAddress": "vm-ubt-1:9000",
"AccessKey": "nVMM0gSqwyIjM8iZ",
"SecretKey": "F8OZngGrNsZSYn4MP9swwMSf5rfm61EC",
"BucketName": "net-admin",
"AccessUrl": "http://vm-ubt-1:9000",
"Secure": false,
}
},
}

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Api; using NetAdmin.SysComponent.Domain.Dto.Sys.Api;
namespace NetAdmin.SysComponent.Application.Modules.Sys; namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Cache; using NetAdmin.SysComponent.Domain.Dto.Sys.Cache;
namespace NetAdmin.SysComponent.Application.Modules.Sys; namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Captcha; using NetAdmin.SysComponent.Domain.Dto.Sys.Captcha;
namespace NetAdmin.SysComponent.Application.Modules.Sys; namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Config; using NetAdmin.SysComponent.Domain.Dto.Sys.Config;
namespace NetAdmin.SysComponent.Application.Modules.Sys; namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Dept; using NetAdmin.SysComponent.Domain.Dto.Sys.Dept;
namespace NetAdmin.SysComponent.Application.Modules.Sys; namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Dev; using NetAdmin.SysComponent.Domain.Dto.Sys.Dev;
namespace NetAdmin.SysComponent.Application.Modules.Sys; namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Dic.Catalog; using NetAdmin.SysComponent.Domain.Dto.Sys.Dic.Catalog;
namespace NetAdmin.SysComponent.Application.Modules.Sys; namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Dic.Content; using NetAdmin.SysComponent.Domain.Dto.Sys.Dic.Content;
namespace NetAdmin.SysComponent.Application.Modules.Sys; namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,5 +1,5 @@
using NetAdmin.Domain.Dto.Sys.Dic.Catalog; using NetAdmin.SysComponent.Domain.Dto.Sys.Dic.Catalog;
using NetAdmin.Domain.Dto.Sys.Dic.Content; using NetAdmin.SysComponent.Domain.Dto.Sys.Dic.Content;
namespace NetAdmin.SysComponent.Application.Modules.Sys; namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,6 +1,5 @@
using NetAdmin.Domain.Dto.Sys; using NetAdmin.SysComponent.Domain.Dto.Sys.Job;
using NetAdmin.Domain.Dto.Sys.Job; using NetAdmin.SysComponent.Domain.Dto.Sys.JobRecord;
using NetAdmin.Domain.Dto.Sys.JobRecord;
namespace NetAdmin.SysComponent.Application.Modules.Sys; namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.JobRecord; using NetAdmin.SysComponent.Domain.Dto.Sys.JobRecord;
namespace NetAdmin.SysComponent.Application.Modules.Sys; namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.LoginLog; using NetAdmin.SysComponent.Domain.Dto.Sys.LoginLog;
namespace NetAdmin.SysComponent.Application.Modules.Sys; namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Menu; using NetAdmin.SysComponent.Domain.Dto.Sys.Menu;
namespace NetAdmin.SysComponent.Application.Modules.Sys; namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.RequestLogDetail; using NetAdmin.SysComponent.Domain.Dto.Sys.RequestLogDetail;
namespace NetAdmin.SysComponent.Application.Modules.Sys; namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,5 +1,4 @@
using NetAdmin.Domain.Dto.Sys; using NetAdmin.SysComponent.Domain.Dto.Sys.RequestLog;
using NetAdmin.Domain.Dto.Sys.RequestLog;
namespace NetAdmin.SysComponent.Application.Modules.Sys; namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Role; using NetAdmin.SysComponent.Domain.Dto.Sys.Role;
namespace NetAdmin.SysComponent.Application.Modules.Sys; namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.SiteMsgDept; using NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsgDept;
namespace NetAdmin.SysComponent.Application.Modules.Sys; namespace NetAdmin.SysComponent.Application.Modules.Sys;

Some files were not shown because too many files have changed in this diff Show More