From b32fe597ddc0202f313dec90c1b435ac36dff10f Mon Sep 17 00:00:00 2001 From: nsnail Date: Mon, 25 Nov 2024 17:01:15 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E2=9A=A1=20=E6=94=AF=E6=8C=81.net9=20(?= =?UTF-8?q?#21)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: tk --- .commitlintrc.js | 2 +- .editorconfig | 93 ++++++------ .gitignore | 6 +- Directory.Build.props | 4 +- NSExt.sln | 139 +++++++++--------- NSExt.sln.DotSettings | 1 + build/code.quality.props | 6 +- dotnet-tools.json | 2 +- nuget.config | 3 +- package.json | 6 +- scripts/1.git.pull.request.ps1 | 6 +- scripts/2.git.release.ps1 | 13 +- scripts/4.git.del.obsolete.tags.ps1 | 2 + scripts/find.unused.ln.csx | 15 ++ scripts/gen.cs.tt | 9 +- scripts/gen.resx.tt | 10 +- scripts/rename.csx | 2 +- scripts/switch.nuget.or.project.csx | 42 ++++++ scripts/sync.sln.files.csx | 24 +-- src/backend/GlobalUsings.cs | 1 + src/backend/NSExt.Tests/NSExt.Tests.csproj | 6 +- .../NSExt/Extensions/StringExtensions.cs | 21 ++- src/backend/NSExt/NSExt.csproj | 2 +- 23 files changed, 250 insertions(+), 165 deletions(-) create mode 100644 scripts/4.git.del.obsolete.tags.ps1 create mode 100644 scripts/find.unused.ln.csx create mode 100644 scripts/switch.nuget.or.project.csx diff --git a/.commitlintrc.js b/.commitlintrc.js index fb715c8..a348141 100644 --- a/.commitlintrc.js +++ b/.commitlintrc.js @@ -64,7 +64,7 @@ module.exports = { maxSubjectLength: Infinity, minSubjectLength: 0, scopeOverrides: undefined, - defaultBody: '', + defaultBody: '[skip ci]', defaultIssues: '', defaultScope: '', defaultSubject: '' diff --git a/.editorconfig b/.editorconfig index b432966..0c64ba7 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,56 +1,59 @@ +# 此文件为 EditorConfig 配置文件,用于设置跨编辑器的代码格式化规则。 +# root = true 表示此文件是根配置文件。 root = true [*] -charset = utf-8 -end_of_line = lf -ij_xml_attribute_wrap = off -ij_xml_text_wrap = off -indent_size = 4 -indent_style = space -insert_final_newline = false -trim_trailing_whitespace = true +charset = utf-8 # 文件字符集为 UTF-8 +end_of_line = lf # 行结束符为 LF +ij_xml_attribute_wrap = off # IntelliJ IDEA 中 XML 属性不换行 +ij_xml_text_wrap = off # IntelliJ IDEA 中 XML 文本不换行 +indent_size = 4 # 缩进大小为 4 个空格 +indent_style = space # 使用空格进行缩进 +insert_final_newline = false # 不在文件末尾插入空行 +max_line_length = 150 # 行长度限制为 150 个字符 +trim_trailing_whitespace = true # 删除行尾的空格 [{*.json,*.yml}] -indent_size = 2 +indent_size = 2 # 对于 JSON 和 YAML 文件,缩进大小为 2 个空格 [*.cs] -dotnet_analyzer_diagnostic.severity = warning +dotnet_analyzer_diagnostic.severity = warning # 设置 C# 文件中所有 dotnet_analyzer_diagnostic 的严重性级别为 warning # ReSharper properties -resharper_align_linq_query = true -resharper_align_multiline_argument = true -resharper_align_multiline_array_and_object_initializer = true -resharper_align_multiline_binary_patterns = true -resharper_align_multiline_calls_chain = true -resharper_align_multiline_extends_list = true -resharper_align_multiline_parameter = true -resharper_align_multiline_property_pattern = true -resharper_align_multiline_switch_expression = true -resharper_align_multiple_declaration = true -resharper_align_multline_type_parameter_constrains = true -resharper_align_multline_type_parameter_list = true -resharper_align_tuple_components = true -resharper_allow_comment_after_lbrace = true -resharper_blank_lines_before_single_line_comment = 1 -resharper_csharp_empty_block_style = together_same_line -resharper_csharp_outdent_commas = true -resharper_csharp_place_type_constraints_on_same_line = false -resharper_csharp_stick_comment = false -resharper_csharp_wrap_before_comma = true -resharper_indent_nested_for_stmt = true -resharper_indent_nested_foreach_stmt = true -resharper_indent_nested_while_stmt = true -resharper_indent_preprocessor_if = usual_indent -resharper_indent_preprocessor_other = usual_indent -resharper_int_align = true -resharper_keep_existing_arrangement = false -resharper_place_linq_into_on_new_line = false -resharper_place_simple_embedded_statement_on_same_line = false -resharper_place_simple_switch_expression_on_single_line = true -resharper_wrap_before_eq = true -resharper_wrap_chained_method_calls = chop_if_long -resharper_wrap_switch_expression = chop_if_long +resharper_align_linq_query = true # 启用对LINQ查询的对齐 +resharper_align_multiline_argument = true # 启用多行参数的对齐 +resharper_align_multiline_array_and_object_initializer = true # 启用多行数组和对象初始化器的对齐 +resharper_align_multiline_binary_patterns = true # 启用多行二元模式的对齐 +resharper_align_multiline_calls_chain = true # 启用多行调用链的对齐 +resharper_align_multiline_extends_list = true # 启用多行扩展列表的对齐 +resharper_align_multiline_parameter = true # 启用多行参数的对齐 +resharper_align_multiline_property_pattern = true # 启用多行属性模式的对齐 +resharper_align_multiline_switch_expression = true # 启用多行切换表达式的对齐 +resharper_align_multiple_declaration = true # 启用多个声明的对齐 +resharper_align_multline_type_parameter_constrains = true # 启用多行类型参数约束的对齐 +resharper_align_multline_type_parameter_list = true # 启用多行类型参数列表的对齐 +resharper_align_tuple_components = true # 启用元组组件的对齐 +resharper_allow_comment_after_lbrace = true # 允许在大括号前添加注释 +resharper_blank_lines_before_single_line_comment = 1 # 在单行注释前添加空行 +resharper_csharp_empty_block_style = together_same_line # 设置空块的样式为“在一起,在同一行” +resharper_csharp_outdent_commas = true # 是否将逗号后的代码退缩 +resharper_csharp_place_type_constraints_on_same_line = false # 在类型约束上是否保持在同一行 +resharper_csharp_stick_comment = false # 是否将注释粘贴在代码行的末尾 +resharper_csharp_wrap_before_comma = true # 在逗号前是否添加换行 +resharper_indent_nested_for_stmt = true # 是否对嵌套的for语句进行缩进 +resharper_indent_nested_foreach_stmt = true # 是否对嵌套的foreach语句进行缩进 +resharper_indent_nested_while_stmt = true # 是否对嵌套的while语句进行缩进 +resharper_indent_preprocessor_if = usual_indent # 设置预处理器指令`if`的缩进方式 +resharper_indent_preprocessor_other = usual_indent # 设置其他预处理器指令的缩进方式 +resharper_int_align = true # 启用整数对齐 +resharper_keep_existing_arrangement = false # 在重新排列时是否保留现有的布局 +resharper_place_linq_into_on_new_line = false # 是否将LINQ表达式放在新行 +resharper_place_simple_embedded_statement_on_same_line = false # 是否将简单的嵌入式语句放在同一行 +resharper_place_simple_switch_expression_on_single_line = true # 是否将简单的切换表达式放在单行 +resharper_wrap_before_eq = true # 在等号前是否添加换行 +resharper_wrap_chained_method_calls = chop_if_long # 是否拆分链式方法调用 +resharper_wrap_switch_expression = chop_if_long # 是否拆分切换表达式 # Microsoft .NET properties -csharp_indent_braces = false -csharp_new_line_before_open_brace = local_functions, methods, types \ No newline at end of file +csharp_indent_braces = false # 设置为false表示花括号不跟随代码行缩进 +csharp_new_line_before_open_brace = local_functions, methods, types # 这里设置为local_functions, methods, types,表示在局部函数、方法和类型定义的开放花括号前应换行 \ No newline at end of file diff --git a/.gitignore b/.gitignore index d756a2e..af8e87d 100644 --- a/.gitignore +++ b/.gitignore @@ -55,7 +55,7 @@ nunit-*.xml dlldata.c # Benchmark Results -BenchmarkNSExtNet.Artifacts/ +BenchmarkDotNet.Artifacts/ # .NET Core project.lock.json @@ -130,12 +130,12 @@ $tf/ # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper -*.NSExtSettings.user +*.DotSettings.user # TeamCity is a build add-in _TeamCity* -# NSExtCover is a Code Coverage Tool +# DotCover is a Code Coverage Tool *.dotCover # AxoCover is a Code Coverage Tool diff --git a/Directory.Build.props b/Directory.Build.props index 5d1b5a8..00d57ad 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -22,11 +22,11 @@ git https://github.com/nsnail/NSExt.git NSExt - net6.0;net7.0;net8.0 + net8.0;net9.0 $(AssemblyName) - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/NSExt.sln b/NSExt.sln index cc49f4c..d8cbe2f 100644 --- a/NSExt.sln +++ b/NSExt.sln @@ -8,87 +8,88 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "backend", "backend", "{4DAF9366-855F-46BB-AE4C-660C92FA0697}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{5198A03D-0CAC-4828-A807-34A693F73859}" - ProjectSection(SolutionItems) = preProject - .commitlintrc.js = .commitlintrc.js - .editorconfig = .editorconfig - .gitattributes = .gitattributes - .gitignore = .gitignore - CHANGELOG.md = CHANGELOG.md - Directory.Build.props = Directory.Build.props - dotnet-tools.json = dotnet-tools.json - global.json = global.json - key.snk = key.snk - LICENSE = LICENSE - NSExt.sln.DotSettings = NSExt.sln.DotSettings - nuget.config = nuget.config - package.json = package.json - README.md = README.md - README.zh-CN.md = README.zh-CN.md - EndProjectSection + ProjectSection(SolutionItems) = preProject + .commitlintrc.js = .commitlintrc.js + .editorconfig = .editorconfig + .gitattributes = .gitattributes + .gitignore = .gitignore + CHANGELOG.md = CHANGELOG.md + Directory.Build.props = Directory.Build.props + dotnet-tools.json = dotnet-tools.json + global.json = global.json + key.snk = key.snk + LICENSE = LICENSE + NSExt.sln.DotSettings = NSExt.sln.DotSettings + nuget.config = nuget.config + package.json = package.json + README.md = README.md + README.zh-CN.md = README.zh-CN.md + EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{BB0B25C9-0901-4923-913F-00F9A6B352A5}" - ProjectSection(SolutionItems) = preProject - 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 - clean.ln.csx = scripts/clean.ln.csx - code.clean.csx = scripts/code.clean.csx - code.clean.ps1 = scripts/code.clean.ps1 - gen.cs.tt = scripts/gen.cs.tt - gen.ln.cmd = scripts/gen.ln.cmd - gen.resx.tt = scripts/gen.resx.tt - 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.nsext.json = scripts/switcher.nsext.json - switcher.ps1 = scripts/switcher.ps1 - sync.sln.files.csx = scripts/sync.sln.files.csx - EndProjectSection + ProjectSection(SolutionItems) = preProject + 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 + find.unused.ln.csx = scripts/find.unused.ln.csx + gen.cs.tt = scripts/gen.cs.tt + gen.ln.cmd = scripts/gen.ln.cmd + gen.resx.tt = scripts/gen.resx.tt + 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 + switch.nuget.or.project.csx = scripts/switch.nuget.or.project.csx + sync.sln.files.csx = scripts/sync.sln.files.csx + EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{1129FE25-466B-4F4F-85FC-3752664245E1}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{3C6F049E-3EE8-4D66-9AFF-E8A369032487}" - ProjectSection(SolutionItems) = preProject - ci.yml = .github/workflows/ci.yml - EndProjectSection + ProjectSection(SolutionItems) = preProject + ci.yml = .github/workflows/ci.yml + EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{8E4C93BA-9493-4892-80C4-5E174C504829}" - ProjectSection(SolutionItems) = preProject - code.quality.props = build/code.quality.props - copy.pkg.xml.comment.files.targets = build/copy.pkg.xml.comment.files.targets - minver.targets = build/minver.targets - nuget.package.props = build/nuget.package.props - prebuild.targets = build/prebuild.targets - stylecop.analyzers.ruleset = build/stylecop.analyzers.ruleset - EndProjectSection + ProjectSection(SolutionItems) = preProject + code.quality.props = build/code.quality.props + copy.pkg.xml.comment.files.targets = build/copy.pkg.xml.comment.files.targets + minver.targets = build/minver.targets + nuget.package.props = build/nuget.package.props + prebuild.targets = build/prebuild.targets + stylecop.analyzers.ruleset = build/stylecop.analyzers.ruleset + EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NSExt", "src\backend\NSExt\NSExt.csproj", "{1E62C322-EE42-4699-A6F1-791C53EFA62D}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NSExt.Tests", "src\backend\NSExt.Tests\NSExt.Tests.csproj", "{00604162-C444-478B-B773-3AB23C856CA7}" EndProject Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {1E62C322-EE42-4699-A6F1-791C53EFA62D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E62C322-EE42-4699-A6F1-791C53EFA62D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E62C322-EE42-4699-A6F1-791C53EFA62D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E62C322-EE42-4699-A6F1-791C53EFA62D}.Release|Any CPU.Build.0 = Release|Any CPU - {00604162-C444-478B-B773-3AB23C856CA7}.Debug|Any CPU.ActiveCfg = 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.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {4DAF9366-855F-46BB-AE4C-660C92FA0697} = {C84EB5A0-37AD-4B17-A51E-E36888C4441E} - {3C6F049E-3EE8-4D66-9AFF-E8A369032487} = {1129FE25-466B-4F4F-85FC-3752664245E1} - {1E62C322-EE42-4699-A6F1-791C53EFA62D} = {4DAF9366-855F-46BB-AE4C-660C92FA0697} - {00604162-C444-478B-B773-3AB23C856CA7} = {4DAF9366-855F-46BB-AE4C-660C92FA0697} - EndGlobalSection + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1E62C322-EE42-4699-A6F1-791C53EFA62D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1E62C322-EE42-4699-A6F1-791C53EFA62D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E62C322-EE42-4699-A6F1-791C53EFA62D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1E62C322-EE42-4699-A6F1-791C53EFA62D}.Release|Any CPU.Build.0 = Release|Any CPU + {00604162-C444-478B-B773-3AB23C856CA7}.Debug|Any CPU.ActiveCfg = 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.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {4DAF9366-855F-46BB-AE4C-660C92FA0697} = {C84EB5A0-37AD-4B17-A51E-E36888C4441E} + {3C6F049E-3EE8-4D66-9AFF-E8A369032487} = {1129FE25-466B-4F4F-85FC-3752664245E1} + {1E62C322-EE42-4699-A6F1-791C53EFA62D} = {4DAF9366-855F-46BB-AE4C-660C92FA0697} + {00604162-C444-478B-B773-3AB23C856CA7} = {4DAF9366-855F-46BB-AE4C-660C92FA0697} + EndGlobalSection EndGlobal \ No newline at end of file diff --git a/NSExt.sln.DotSettings b/NSExt.sln.DotSettings index 0913323..ca3833b 100644 --- a/NSExt.sln.DotSettings +++ b/NSExt.sln.DotSettings @@ -78,6 +78,7 @@ True True True + True True True diff --git a/build/code.quality.props b/build/code.quality.props index 5e41197..e41af6c 100644 --- a/build/code.quality.props +++ b/build/code.quality.props @@ -15,15 +15,15 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/dotnet-tools.json b/dotnet-tools.json index 64cfe12..a5e0c0d 100644 --- a/dotnet-tools.json +++ b/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "dotnet-t4": { - "version": "2.3.1", + "version": "3.0.0", "commands": [ "t4" ] diff --git a/nuget.config b/nuget.config index 0066ce1..b9d3b44 100644 --- a/nuget.config +++ b/nuget.config @@ -2,7 +2,6 @@ - - + \ No newline at end of file diff --git a/package.json b/package.json index 950910a..f5b6b48 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "version": "2.2.0", "devDependencies": { - "cz-git": "^1.7.1", - "commitizen": "^4.3.0", - "prettier": "^3.1.0", + "cz-git": "^1.11.0", + "commitizen": "^4.3.1", + "prettier": "^3.3.3", "standard-version": "^9.5.0" }, "config": { diff --git a/scripts/1.git.pull.request.ps1 b/scripts/1.git.pull.request.ps1 index 58767d1..7045b2a 100644 --- a/scripts/1.git.pull.request.ps1 +++ b/scripts/1.git.pull.request.ps1 @@ -1,6 +1,10 @@ $branch = $( git branch --show-current ) git add ../ -./code.clean.ps1 +$skipFormat = Read-Host "输入 n 跳过代码整理" +if ($skipFormat -ne "n") +{ + ./code.clean.ps1 +} git add ../ ../node_modules/.bin/git-cz.ps1 git pull diff --git a/scripts/2.git.release.ps1 b/scripts/2.git.release.ps1 index 8bdabe0..9babdbe 100644 --- a/scripts/2.git.release.ps1 +++ b/scripts/2.git.release.ps1 @@ -1,7 +1,7 @@ cd .. $types = @{ '1' = @('major', '主版本') - '2' = @('minor', '此版本') + '2' = @('minor', '次版本') '3' = @('patch', '修订版本') } $prefix = '' @@ -10,19 +10,20 @@ while ($null -eq $types[$prefix]) $prefix = Read-Host "请选择版本类型`n" $( & { param($i) $i | ForEach-Object { "$_ : $( $types[$_][0] )($( $types[$_][1] ))`n" } } $types.Keys | Sort-Object ) } git checkout main +git pull git branch -D release git checkout -b release ./node_modules/.bin/standard-version -r $types[$prefix][0] -cd ./scripts -./code.clean.ps1 git commit --amend --no-edit -a -$tag = $(git describe --tags $(git rev-list --tags --max-count=1)) +$tag = $( git describe --tags $( git rev-list --tags --max-count = 1 ) ) git tag -d $tag git tag $tag git push --tags origin release Start-Process -FilePath "https://github.com/nsnail/NSExt/compare/main...release" -Write-Host "按『Enter』回到主分支,『Ctrl+C』退出" +Write-Host "按『Enter』回到tk分支,『Ctrl+C』退出" Pause git checkout main git pull -git branch -D release \ No newline at end of file +git branch -D release +git branch -D tk +git checkout -b tk \ No newline at end of file diff --git a/scripts/4.git.del.obsolete.tags.ps1 b/scripts/4.git.del.obsolete.tags.ps1 new file mode 100644 index 0000000..db65409 --- /dev/null +++ b/scripts/4.git.del.obsolete.tags.ps1 @@ -0,0 +1,2 @@ +git push origin :refs/tags/$(git tag -l "*-*") +git tag -d $(git tag -l "*-*") \ No newline at end of file diff --git a/scripts/find.unused.ln.csx b/scripts/find.unused.ln.csx new file mode 100644 index 0000000..6bb0208 --- /dev/null +++ b/scripts/find.unused.ln.csx @@ -0,0 +1,15 @@ +using System.Text.RegularExpressions; + +Console.WriteLine(string.Join(Environment.NewLine + , Regex + .Matches(File.ReadAllText(@"../assets/res/Ln.resx") + , "data name=\"(.*?)\"") + .Select(x => x.Groups[1].Value) + .Where(x => !Directory + .GetFiles(@"../src/backend/", "*.cs" + , new EnumerationOptions { + RecurseSubdirectories = true + }) + .Select(File.ReadAllText) + .Any(y => y.Contains(x))))); +Console.ReadKey(); \ No newline at end of file diff --git a/scripts/gen.cs.tt b/scripts/gen.cs.tt index 5c029ee..909281d 100644 --- a/scripts/gen.cs.tt +++ b/scripts/gen.cs.tt @@ -1,6 +1,7 @@ <#@ template language="C#" #> <#@ assembly name="System.Xml" #> <#@ output encoding="utf-8" extension="Designer.cs" #> +<#@ import namespace="System.Xml" #> //------------------------------------------------------------------------------ // @@ -27,8 +28,8 @@ namespace NSExt.Languages; // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] -[System.Diagnostics.DebuggerNonUserCode] -[System.Runtime.CompilerServices.CompilerGenerated] +[DebuggerNonUserCode] +[CompilerGenerated] public sealed class Ln { private static ResourceManager _resourceMan; @@ -61,9 +62,9 @@ public sealed class Ln [EditorBrowsable(EditorBrowsableState.Advanced)] public static CultureInfo Culture { get; set; } <# - var xml = new System.Xml.XmlDocument(); + var xml = new XmlDocument(); xml.Load("../assets/res/Ln.resx"); - foreach (System.Xml.XmlNode data in xml.SelectNodes("//root/data")!) + foreach (XmlNode data in xml.SelectNodes("//root/data")!) { #> /// diff --git a/scripts/gen.resx.tt b/scripts/gen.resx.tt index 6e0cad2..29f8b5c 100644 --- a/scripts/gen.resx.tt +++ b/scripts/gen.resx.tt @@ -1,5 +1,8 @@ <#@ template language="C#" #> <#@ output encoding="utf-8" extension="resx" #> +<#@ import namespace="System.IO" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="System.Text.RegularExpressions" #> <# - var regex = new System.Text.RegularExpressions.Regex(@"^\d", System.Text.RegularExpressions.RegexOptions.Compiled); - foreach (var file in System.IO.Directory.GetFiles("../assets/res/", "*.ln")) + var regex = new Regex(@"^\d", RegexOptions.Compiled); + foreach (var line in Directory.GetFiles("../assets/res/", "*.ln").SelectMany(x => File.ReadLines(x)).Distinct()) { - foreach (var line in System.IO.File.ReadLines(file)) - { #> <#= line #>" xml:space="preserve"><#= line #> <# - } } #> \ No newline at end of file diff --git a/scripts/rename.csx b/scripts/rename.csx index cb7672a..e366975 100644 --- a/scripts/rename.csx +++ b/scripts/rename.csx @@ -1,4 +1,4 @@ -#r "nuget: NSExt, 1.1.0" +#r "nuget: NSExt, 2.2.0" using NSExt.Extensions; Console.WriteLine("请输入原始名称(NSExt):"); diff --git a/scripts/switch.nuget.or.project.csx b/scripts/switch.nuget.or.project.csx new file mode 100644 index 0000000..57ad429 --- /dev/null +++ b/scripts/switch.nuget.or.project.csx @@ -0,0 +1,42 @@ +using System.Text.RegularExpressions; +string input = string.Empty; +while (!new[] { "1", "2" }.Contains(input)) +{ + Console.WriteLine("1.nuget 2.project"); + input = Console.ReadLine(); +} +var slnFile = Directory.GetFiles(@"../", "*.sln").First(); +var csprojFiles = Directory.GetFiles(@"../src", "*.csproj", new EnumerationOptions { RecurseSubdirectories = true }); +var slnContent = File.ReadAllText(slnFile); + +if (input == "1") +{ + slnContent = Regex.Replace(slnContent, "\\nProject\\((.*)#refs", "\n##Project($1#refs"); + slnContent = Regex.Replace(slnContent, "\\nEndProject#refs", "\n##EndProject#refs"); + foreach (Match m in Regex.Matches(slnContent, "\"(\\{[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}\\})\"#refs")) + { + slnContent = slnContent.Replace($" {m.Groups[1].Value}.", $" ##{m.Groups[1].Value}."); + } + foreach (var csprojFile in csprojFiles) + { + var csprojContent = File.ReadAllText(csprojFile); + csprojContent = Regex.Replace(csprojContent," ", " "); + csprojContent = Regex.Replace(csprojContent," ", " "); + File.WriteAllText(csprojFile, csprojContent); + } +} +else +{ + slnContent = Regex.Replace(slnContent, "##", ""); + foreach (var csprojFile in csprojFiles) + { + var csprojContent = File.ReadAllText(csprojFile); + csprojContent = Regex.Replace(csprojContent," ", " "); + csprojContent = Regex.Replace(csprojContent," ", " "); + File.WriteAllText(csprojFile, csprojContent); + } +} + + +Console.WriteLine(slnContent); +File.WriteAllText(slnFile, slnContent); \ No newline at end of file diff --git a/scripts/sync.sln.files.csx b/scripts/sync.sln.files.csx index 201e1d6..b197fa6 100644 --- a/scripts/sync.sln.files.csx +++ b/scripts/sync.sln.files.csx @@ -8,12 +8,12 @@ content = Regex.Replace( "Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"meta\", \"meta\", \"{5198A03D-0CAC-4828-A807-34A693F73859}\"(?:.|\n)*?EndProject", $$""" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{5198A03D-0CAC-4828-A807-34A693F73859}" -{{'\t'}}ProjectSection(SolutionItems) = preProject + ProjectSection(SolutionItems) = preProject {{string.Join('\n', Directory.GetFiles(@"../", "*").Where(x => !x.EndsWith(".sln") && !x.EndsWith(".user")) - .Select(x=>$"\t\t{Path.GetFileName(x)} = {Path.GetFileName(x)}") + .Select(x=>$" {Path.GetFileName(x)} = {Path.GetFileName(x)}") )}} -{{'\t'}}EndProject + EndProject """ ); @@ -22,12 +22,12 @@ content = Regex.Replace( "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}" -{{'\t'}}ProjectSection(SolutionItems) = preProject + ProjectSection(SolutionItems) = preProject {{string.Join('\n', Directory.GetFiles(@"../.github/workflows", "*") - .Select(x=>$"\t\t{Path.GetFileName(x)} = .github/workflows/{Path.GetFileName(x)}") + .Select(x=>$" {Path.GetFileName(x)} = .github/workflows/{Path.GetFileName(x)}") )}} -{{'\t'}}EndProject + EndProject """ ); @@ -36,12 +36,12 @@ content = Regex.Replace( "Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"scripts\", \"scripts\", \"{BB0B25C9-0901-4923-913F-00F9A6B352A5}\"(?:.|\n)*?EndProject", $$""" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{BB0B25C9-0901-4923-913F-00F9A6B352A5}" -{{'\t'}}ProjectSection(SolutionItems) = preProject + ProjectSection(SolutionItems) = preProject {{string.Join('\n', Directory.GetFiles(@"../scripts", "*") - .Select(x=>$"\t\t{Path.GetFileName(x)} = scripts/{Path.GetFileName(x)}") + .Select(x=>$" {Path.GetFileName(x)} = scripts/{Path.GetFileName(x)}") )}} -{{'\t'}}EndProject + EndProject """ ); @@ -50,12 +50,12 @@ content = Regex.Replace( "Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"build\", \"build\", \"{8E4C93BA-9493-4892-80C4-5E174C504829}\"(?:.|\n)*?EndProject", $$""" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{8E4C93BA-9493-4892-80C4-5E174C504829}" -{{'\t'}}ProjectSection(SolutionItems) = preProject + ProjectSection(SolutionItems) = preProject {{string.Join('\n', Directory.GetFiles(@"../build", "*") - .Select(x=>$"\t\t{Path.GetFileName(x)} = build/{Path.GetFileName(x)}") + .Select(x=>$" {Path.GetFileName(x)} = build/{Path.GetFileName(x)}") )}} -{{'\t'}}EndProject + EndProject """ ); diff --git a/src/backend/GlobalUsings.cs b/src/backend/GlobalUsings.cs index bcf7404..07f8a9f 100644 --- a/src/backend/GlobalUsings.cs +++ b/src/backend/GlobalUsings.cs @@ -1,5 +1,6 @@ global using System; global using System.ComponentModel; +global using System.Diagnostics; global using System.Globalization; global using System.Text; global using System.Text.RegularExpressions; diff --git a/src/backend/NSExt.Tests/NSExt.Tests.csproj b/src/backend/NSExt.Tests/NSExt.Tests.csproj index b14ac29..3822fe7 100644 --- a/src/backend/NSExt.Tests/NSExt.Tests.csproj +++ b/src/backend/NSExt.Tests/NSExt.Tests.csproj @@ -1,8 +1,8 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/src/backend/NSExt/Extensions/StringExtensions.cs b/src/backend/NSExt/Extensions/StringExtensions.cs index 1b3a3c9..fa4c2f1 100644 --- a/src/backend/NSExt/Extensions/StringExtensions.cs +++ b/src/backend/NSExt/Extensions/StringExtensions.cs @@ -258,10 +258,13 @@ public static class StringExtensions #pragma warning disable CA5350 using var hmacSha1 = new HMACSHA1(e.GetBytes(secret)); #pragma warning restore CA5350 - + #if NET9_0_OR_GREATER + return Convert.ToHexStringLower(hmacSha1.ComputeHash(e.GetBytes(me))); + #else return BitConverter.ToString(hmacSha1.ComputeHash(e.GetBytes(me))) - .Replace("-", string.Empty) - .ToLower(CultureInfo.CurrentCulture); + .Replace("-", string.Empty) + .ToLower(CultureInfo.CurrentCulture); + #endif } /// @@ -405,10 +408,14 @@ public static class StringExtensions public static string Md5(this string me, Encoding e) { #pragma warning disable CA5351 + #if NET9_0_OR_GREATER + return Convert.ToHexStringLower(MD5.HashData(e.GetBytes(me))); + #else return BitConverter.ToString(MD5.HashData(e.GetBytes(me))) #pragma warning restore CA5351 .Replace("-", string.Empty) .ToLower(CultureInfo.CurrentCulture); + #endif } /// @@ -490,10 +497,14 @@ public static class StringExtensions public static string Sha1(this string me, Encoding e) { #pragma warning disable CA5350 + #if NET9_0_OR_GREATER + return Convert.ToHexStringLower(SHA1.HashData(e.GetBytes(me))); + #else return BitConverter.ToString(SHA1.HashData(e.GetBytes(me))) #pragma warning restore CA5350 .Replace("-", string.Empty) .ToLower(CultureInfo.CurrentCulture); + #endif } /// @@ -606,9 +617,13 @@ public static class StringExtensions #pragma warning disable CA5351 using var md5Hmac = new HMACMD5(e.GetBytes(key)); #pragma warning restore CA5351 + #if NET9_0_OR_GREATER + return Convert.ToHexStringLower(md5Hmac.ComputeHash(e.GetBytes(me))); + #else return BitConverter.ToString(md5Hmac.ComputeHash(e.GetBytes(me))) .Replace("-", string.Empty) .ToLower(CultureInfo.CurrentCulture); + #endif } } #pragma warning restore CodeLinesAnalyzer \ No newline at end of file diff --git a/src/backend/NSExt/NSExt.csproj b/src/backend/NSExt/NSExt.csproj index 5dbf59e..5969fdd 100644 --- a/src/backend/NSExt/NSExt.csproj +++ b/src/backend/NSExt/NSExt.csproj @@ -7,7 +7,7 @@ - +