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

Co-authored-by: tk <fiyne1a@dingtalk.com>
This commit is contained in:
nsnail 2024-11-04 12:06:50 +08:00 committed by GitHub
parent 072cc1e491
commit 13ba536df2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
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
*.sln.iml
.idea/
!src/backend/CloudCode.DataGrip/.idea
# User Define
dist/

6
.gitmodules vendored
View File

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

View File

@ -1,6 +1,7 @@
<!-- 注意此文件名大小写不可变更 -->
<Project>
<PropertyGroup>
<DefineConstants>DBTYPE_SQLITE</DefineConstants>
<SolutionDir>$(MSBuildThisFileDirectory)</SolutionDir>
</PropertyGroup>
<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
2.git.release.ps1 = scripts/2.git.release.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
code.clean.csx = scripts/code.clean.csx
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.ln.cmd = scripts/gen.ln.cmd
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
install.as.tpl.ps1 = scripts/install.as.tpl.ps1
rename.csx = scripts/rename.csx
resharper.full.ps1 = scripts/resharper.full.ps1
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.ps1 = scripts/switcher.ps1
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}"
ProjectSection(SolutionItems) = preProject
nightly-build.yml = .github/workflows/nightly-build.yml
README.md = .github/workflows/README.md
release.yml = .github/workflows/release.yml
EndProjectSection
EndProject
@ -99,10 +100,25 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "01.frameworks", "01.framewo
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "04.tests", "04.tests", "{89260294-80FC-49F1-8D73-AECD39AFF2B7}"
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
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Tests", "src\backend\NetAdmin.Tests\NetAdmin.Tests.csproj", "{00604162-C444-478B-B773-3AB23C856CA7}"
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
GlobalSection(SolutionConfigurationPlatforms) = preSolution
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}.Release|Any CPU.ActiveCfg = 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
GlobalSection(NestedProjects) = preSolution
{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}
{89260294-80FC-49F1-8D73-AECD39AFF2B7} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{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}
{34650E82-D257-46DA-BD6B-DE307113347B} = {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}
{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
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_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/=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>

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
小于
小于等于
小学
已发送
已婚
已校验
已读
并且
成功
或者
所属角色
所属部门
手机
手机号
执行耗时
执行计划
护照
指定部门数据
按钮
排序
@ -69,66 +32,41 @@
接口导出
接口描述
接口路径
插入种子数据
操作系统
数据范围
无效操作
无效输入
无限权限
日期范围
是否启用
显示仪表板
最后登录时间
未处理异常
未婚
未读
本人数据
本科
本部门和下级部门数据
本部门数据
框架
比较数据库结构
注册
消息主题
消息摘要
消息类型
港澳台通行证
用户代理
用户名
用户导出
电子邮箱
登录
登录名
登录日志导出
硕士
示例导出
离异
空闲
站内信导出
等于
等待发送
管理模块
系统模块
绑定手机号码
结果非预期
群众
自定义
范围
菜单
角色名称
角色导出
解绑手机号码
警告
计划作业导出
计划作业执行记录导出
请求方式
请求日志导出
调试
跟踪
跟踪标识
跟踪编号
身份证
运行
通知
邮箱号
@ -137,11 +75,7 @@
配置导出
重设密码
链接
错误
随机排序
项值
项名
顺序排序
高中
默认角色
默认部门

View File

@ -1,17 +1,9 @@
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"
StdOutEncoding="utf-8" />
</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>

1
docker/README.md Normal file
View File

@ -0,0 +1 @@
docker

@ -1 +0,0 @@
Subproject commit d23c7cca552e9b1b1365349741139a012e2bc955

View File

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

View File

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

View File

@ -1,15 +1,15 @@
{
"solution": "NetAdmin.sln",
"mappings": {
"Furion.Pure.NS": "../refs/Furion/framework/Furion.Pure/Furion.Pure.csproj"
"Gurion": "../refs/Gurion/src/Gurion.csproj"
},
"restore": [
{
"name": "NetAdmin.Infrastructure",
"packages": [
{
"packageName": "Furion.Pure.NS",
"version": "4.9.5.8-ns1"
"packageName": "Gurion",
"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,
"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.DataAnnotations;
global using FreeSql.Internal.Model;
global using Furion;
global using Furion.Authorization;
global using Furion.ConfigurableOptions;
global using Furion.DataEncryption;
global using Furion.DataValidation;
global using Furion.DependencyInjection;
global using Furion.DynamicApiController;
global using Furion.EventBus;
global using Furion.SpecificationDocument;
global using Furion.UnifyResult;
global using Gurion;
global using Gurion.Authorization;
global using Gurion.ConfigurableOptions;
global using Gurion.DataEncryption;
global using Gurion.DataValidation;
global using Gurion.DependencyInjection;
global using Gurion.DynamicApiController;
global using Gurion.EventBus;
global using Gurion.SpecificationDocument;
global using Gurion.UnifyResult;
global using Mapster;
global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Builder;

View File

@ -1,9 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<DefineConstants>DBTYPE_SQLITE</DefineConstants>
</PropertyGroup>
<Import Project="$(SolutionDir)/build/code.quality.props"/>
<ItemGroup>
<ProjectReference Include="../NetAdmin.AdmServer.Domain/NetAdmin.AdmServer.Domain.csproj"/>
<ProjectReference Include="../NetAdmin.SysComponent.Application/NetAdmin.SysComponent.Application.csproj"/>
</ItemGroup>
<ItemGroup>
<PackageReference Include="MailKit" Version="4.8.0"/>
</ItemGroup>
</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">
<Import Project="$(SolutionDir)/build/code.quality.props"/>
<ItemGroup>
<ProjectReference Include="../NetAdmin.SysComponent.Cache/NetAdmin.SysComponent.Cache.csproj"/>
<ProjectReference Include="../NetAdmin.AdmServer.Application/NetAdmin.AdmServer.Application.csproj"/>
<ProjectReference Include="../NetAdmin.SysComponent.Cache/NetAdmin.SysComponent.Cache.csproj"/>
</ItemGroup>
</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.Domain.Contexts;
using NetAdmin.Domain.DbMaps.Dependency.Fields;
using NetAdmin.Domain.Enums.Sys;
using NetAdmin.Host.Extensions;
using NetAdmin.SysComponent.Domain.Contexts;
using NetAdmin.SysComponent.Domain.Enums.Sys;
using NetAdmin.SysComponent.Host.Extensions;
namespace NetAdmin.AdmServer.Host.Extensions;

View File

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

View File

@ -91,7 +91,8 @@ namespace NetAdmin.AdmServer.Host
.AddFreeSqlWithArgs() // 添加 freeSql
.AddRemoteRequest() // 添加远程请求
.AddCorsAccessor() // 添加支持跨域访问
.AddContextUser() // 添加上下文用户
.AddContextUserToken() // 添加上下文用户令牌
.AddContextUserInfo() // 添加上下文用户信息
.AddRedisCache() // 添加 Redis 缓存
.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;
namespace NetAdmin.SysComponent.Application.Modules.Tpl;
namespace NetAdmin.Application.Modules.Tpl;
/// <summary>
/// 示例模块

View File

@ -1,7 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<DefineConstants>DBTYPE_SQLITE</DefineConstants>
</PropertyGroup>
<Import Project="$(SolutionDir)/build/code.quality.props"/>
<ItemGroup>
<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.Dto.Dependency;
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" />
public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //

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.SysComponent.Application.Services.Tpl.Dependency;
using NetAdmin.SysComponent.Cache.Tpl.Dependency;
namespace NetAdmin.SysComponent.Cache.Tpl;
namespace NetAdmin.Cache.Tpl;
/// <inheritdoc cref="IExampleCache" />
public sealed class ExampleCache(IDistributedCache cache, IExampleService service)

View File

@ -1,5 +1,3 @@
using NetAdmin.Domain.Dto.Sys.User;
namespace NetAdmin.Domain.Contexts;
/// <summary>
@ -43,9 +41,9 @@ public sealed record ContextUserToken : DataAbstraction
/// <summary>
/// 从 QueryUserRsp 创建上下文用户
/// </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>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,13 +1,5 @@
global using NetAdmin.Domain.Attributes;
global using NetAdmin.Domain.Attributes.DataValidation;
global using NetAdmin.Domain.Attributes;
global using NetAdmin.Domain.DbMaps.Dependency;
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 CsvIndex = CsvHelper.Configuration.Attributes.IndexAttribute;
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.SysComponent.Application.Modules.Tpl;
using NetAdmin.SysComponent.Application.Services.Tpl.Dependency;
using NetAdmin.SysComponent.Cache.Tpl.Dependency;
using NetAdmin.Host.Attributes;
namespace NetAdmin.SysComponent.Host.Controllers.Tpl;
namespace NetAdmin.Host.Controllers.Tpl;
/// <summary>
/// 示例服务

View File

@ -1,12 +1,7 @@
using Furion.Logging;
using Gurion.Logging;
using NetAdmin.Domain.Contexts;
using NetAdmin.Domain.Events;
using NetAdmin.Host.Filters;
using NetAdmin.Host.Utils;
using StackExchange.Redis;
using Yitter.IdGenerator;
using FreeSqlBuilder = NetAdmin.Infrastructure.Utils.FreeSqlBuilder;
#if DEBUG
using Spectre.Console;
#endif
@ -83,7 +78,7 @@ public static class ServiceCollectionExtensions
this IServiceCollection me)
{
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)))
select type;
@ -126,12 +121,11 @@ public static class ServiceCollectionExtensions
}
/// <summary>
/// 添加上下文用户
/// 添加上下文用户令牌
/// </summary>
public static IServiceCollection AddContextUser(this IServiceCollection me)
public static IServiceCollection AddContextUserToken(this IServiceCollection me)
{
return me.AddScoped(typeof(ContextUserToken), _ => ContextUserToken.Create())
.AddScoped(typeof(ContextUserInfo), _ => ContextUserInfo.Create());
return me.AddScoped(typeof(ContextUserToken), _ => ContextUserToken.Create());
}
/// <summary>
@ -142,42 +136,6 @@ public static class ServiceCollectionExtensions
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>

View File

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

View File

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

View File

@ -1,8 +1,8 @@
using Furion.FriendlyException;
using Gurion.FriendlyException;
namespace NetAdmin.Host.Filters;
/// <inheritdoc cref="Furion.FriendlyException.IGlobalExceptionHandler" />
/// <inheritdoc cref="Gurion.FriendlyException.IGlobalExceptionHandler" />
public sealed class GlobalExceptionHandler(ILogger<GlobalExceptionHandler> logger) : IGlobalExceptionHandler, ISingleton
{
/// <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>
/// 选项抽象基类

View File

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

View File

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

View File

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

View File

@ -1,3 +1,5 @@
using NetAdmin.Infrastructure.Configuration.Dependency;
namespace NetAdmin.Infrastructure.Configuration.Options;
/// <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_TRACE = "TRACE";
public const string FLG_PATH_API_METRICS = "metrics";
public const string FLG_PATH_API_RPOBE = "api/probe";
public const string FLG_PATH_API_SYS_USER_LOGIN_BY_PWD = "api/sys/user/login.by.pwd";
public const string FLG_PATH_WEBSOCKET_PREFIX = "ws";
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
= "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>
public static class Numbers
{
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 long ID_DIC_CATALOG_GEO_AREA = 379794295185413; // 唯一编号:字典目录-行政区划字典
public const int DEF_PAGE_SIZE_QUERY = 20; // 默认值:分页查询页容量
public const int HTTP_STATUS_BIZ_FAIL = 900; // HTTP状态码业务异常
public const int MAX_LIMIT_BULK_REQ = 100; // 最大限制:批量请求数
public const int MAX_LIMIT_EXPORT = 10000; // 最大限制导出为CSV文件的条数
public const int MAX_LIMIT_EXPORT = 50000; // 最大限制导出为CSV文件的条数
public const int MAX_LIMIT_QUERY = 1000; // 最大限制:非分页查询条数
public const int MAX_LIMIT_QUERY_PAGE_NO = 10000; // 最大限制:分页查询页码
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 UnusedMember.Global
namespace NetAdmin.Infrastructure.Enums;

View File

@ -35,11 +35,6 @@ public static class GlobalStatic
/// </summary>
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>

View File

@ -5,16 +5,36 @@
<ItemGroup>
<PackageReference Include="FreeSql.DbContext.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="Furion.Extras.ObjectMapper.Mapster.NS" Version="4.9.5.8-ns1"/>
<PackageReference Include="Furion.Pure.NS" Version="4.9.5.8-ns1"/>
<PackageReference Include="Gurion" Version="1.1.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="Minio" Version="6.0.3"/>
<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="System.Drawing.Common" Version="9.0.0-rc.2.24474.1"/>
</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>
<None Update="*.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

View File

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

View File

@ -3,13 +3,5 @@
"AppSettings": {
"InjectSpecificationDocument": 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 DataType = FreeSql.DataType;
@ -13,7 +16,13 @@ public sealed class FreeSqlBuilder(DatabaseOptions databaseOptions)
/// </summary>
public IFreeSql Build(FreeSqlInitMethods initMethods)
{
var freeSql = new FreeSql.FreeSqlBuilder().UseConnectionString(databaseOptions.DbType, databaseOptions.ConnStr)
var freeSql = new FreeSql.FreeSqlBuilder()
#if DBTYPE_SQLSERVER
.UseConnectionFactory(databaseOptions.DbType, () => new SqlConnection(databaseOptions.ConnStr))
.UseAdoConnectionPool(true)
#else
.UseConnectionString(databaseOptions.DbType, databaseOptions.ConnStr)
#endif
.UseGenerateCommandParameterWithLambda(true)
.UseAutoSyncStructure(initMethods.HasFlag(FreeSqlInitMethods.SyncStructure))
.Build();

View File

@ -19,7 +19,7 @@ public sealed class XmlCommentReader : ISingleton
var xmlComments = specificationDocumentSettings.Value.XmlComments //
?? App.GetConfig<SpecificationDocumentSettingsOptions>(nameof(SpecificationDocumentSettingsOptions).TrimSuffixOptions())
.XmlComments;
foreach (var commentFile in xmlComments.Where(x => x.Contains(nameof(NetAdmin)))) {
foreach (var commentFile in xmlComments) {
var xmlDoc = new XmlDocument();
var xmlFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, commentFile);
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
// ExternalAssembliesstring[] []
// PrintDbConnectionInfo MiniProfiler bool true
// SupportPackageNamePrefixsstring[] []
// OutputOriginalSqlExecuteLog Sql ADO.NET true
// VirtualPath /
"InjectSpecificationDocument": false,
"InjectMiniProfiler": false
},
// Swagger ------------------------------------------------------------------------------
"SpecificationDocumentSettings": {
// DocumentTitlestring Specification Api Document
// DefaultGroupNamestring Default
// EnableAuthorizedbool true
// FormatAsV2 Swagger 2.0 bool false
// RoutePrefixstring api
// DocExpansionStateDocExpansion List
// List
// Full
// None
// XmlComments .xmlstring Furion.Application, Furion.Web.Entry, Furion.Web.Core
// GroupOpenApiInfosSpecificationOpenApiInfo[] { 'Group': 'Default'}
// SecurityDefinitionsSpecificationOpenApiSecurityScheme[] []
// Servers Server OpenApiServer[] []{Servers:[ { Url:"地址", Description:"描述"} ]}
// HideServers Server bool true
// RouteTemplate swagger.json swagger/{documentName}/swagger.json, {documentName}
// PackagesGroupsstring[] []
// EnableEnumSchemaFilter Schema bool true
// EnableTagsOrderDocumentFilterbool 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
//
// Groupstring
// Orderint 0
// Visiblebool true
// Titlestring
// Descriptionstring
// Version 1.0
// TermsOfServiceUri
// ContactOpenApiContact
// LicenseOpenApiLicense
"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
// PolicyNamestring App.Cors.Policy
// WithOriginsstring[] *
// WithHeadersstring[]
// WithExposedHeadersstring[] ["access-token", "x-access-token"]
// WithMethodsstring[]
// AllowCredentialsbool true
// SetPreflightMaxAgeint 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
//
// DefaultRoutePrefixstring api
// DefaultHttpMethodstringPOST
// DefaultModulestringv1
// LowercaseRoutebooltrue
// AsLowerCamelCase false
// KeepVerbboolfalse
// KeepNameboolfasle
// CamelCaseSeparator()/string-
// VersionSeparatorstring@
// ModelToQueryGET/HEAD bool false
// SupportedMvcController Mvc Controller bool false
// UrlParameterization [FromQuery] false[FromRoute]
// DefaultArea null
// ForceWithRoutePrefix DefaultRoutePrefix [Route] v3.4.1+
// AbandonControllerAffixesstring[]
// AppServices
// AppService
// ApiController
// Controller
// Services
// Service
// AbandonActionAffixesstring[]
// 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
// HideErrorCodebool false
// DefaultErrorCodestring
// DefaultErrorMessagestring
// ThrowBah Oops.Oh bool false true Oops.Oh OnValidateFailed OnException
// LogErrorbool 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 truetrue
"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
// 0Furion 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 // 0Furion 4.3.9+
// }
// ]
}
},
// Redis --------------------------------------------------------------------------------------------------------
"Redis": {
"Instances": [
//
{
"Name": "DataCache",
"ConnStr": "localhost:6379,abortConnect=false",
"DataBase": 0,
}
]
},
// UnifyResultSettings ------------------------------------------------------------------------------------
"UnifyResultSettings": {
// Return200StatusCodes 200 int[] 400+(404)
// AdaptStatusCodesint[][] 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;

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;

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;

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;

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;

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;

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;

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;

View File

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

View File

@ -1,6 +1,5 @@
using NetAdmin.Domain.Dto.Sys;
using NetAdmin.Domain.Dto.Sys.Job;
using NetAdmin.Domain.Dto.Sys.JobRecord;
using NetAdmin.SysComponent.Domain.Dto.Sys.Job;
using NetAdmin.SysComponent.Domain.Dto.Sys.JobRecord;
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;

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;

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;

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;

View File

@ -1,5 +1,4 @@
using NetAdmin.Domain.Dto.Sys;
using NetAdmin.Domain.Dto.Sys.RequestLog;
using NetAdmin.SysComponent.Domain.Dto.Sys.RequestLog;
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;

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;

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