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 @@
-
+