From 1f1737591589faa2141c20ef3f15f326307ec5ab Mon Sep 17 00:00:00 2001 From: nsnail Date: Wed, 8 Feb 2023 22:15:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20*=20=E6=B3=9B=E5=9E=8B=E7=89=B9?= =?UTF-8?q?=E6=80=A7=E6=9C=AC=E5=9C=B0=E5=8C=96=E8=B5=84=E6=BA=90=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0=20*=20=E6=B7=BB=E5=8A=A0=E6=B5=8B=E8=AF=95=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CodeQuality.props | 2 +- Directory.Build.props | 30 ++----------- NSExt.sln | 18 +++++--- src/Extensions/EnumExtensions.cs | 29 ------------- src/NSExt.Tests/NSExt.Tests.csproj | 9 ++++ src/NSExt.Tests/TestCase.cs | 41 ++++++++++++++++++ src/NSExt.csproj | 15 ------- .../Attributes/LocalizationAttribute.cs | 0 .../ResourceDescriptionAttribute.cs | 26 ++++++++++++ src/{ => NSExt}/Constant/Regexes.cs | 0 src/{ => NSExt}/Extensions/ByteExtensions.cs | 0 src/{ => NSExt}/Extensions/CharExtensions.cs | 0 .../Extensions/DateTimeExtensions.cs | 0 .../Extensions/DbCommandExtensions.cs | 0 .../Extensions/DecimalExtensions.cs | 0 src/NSExt/Extensions/EnumExtensions.cs | 42 +++++++++++++++++++ .../Extensions/EnumerableExtensions.cs | 0 .../Extensions/GenericExtensions.cs | 0 src/{ => NSExt}/Extensions/IntExtensions.cs | 0 .../Extensions/LoggerExtensions.cs | 0 src/{ => NSExt}/Extensions/LongExtensions.cs | 0 .../Extensions/ObjectExtensions.cs | 0 .../Extensions/StreamExtensions.cs | 0 .../Extensions/StringExtensions.cs | 0 src/{ => NSExt}/Extensions/TypeExtensions.cs | 0 src/{ => NSExt}/Extensions/UriExtensions.cs | 0 src/{ => NSExt}/GlobalUsings.cs | 0 src/NSExt/NSExt.csproj | 35 ++++++++++++++++ src/{ => NSExt}/README.md | 0 29 files changed, 170 insertions(+), 77 deletions(-) delete mode 100644 src/Extensions/EnumExtensions.cs create mode 100644 src/NSExt.Tests/NSExt.Tests.csproj create mode 100644 src/NSExt.Tests/TestCase.cs delete mode 100644 src/NSExt.csproj rename src/{ => NSExt}/Attributes/LocalizationAttribute.cs (100%) create mode 100644 src/NSExt/Attributes/ResourceDescriptionAttribute.cs rename src/{ => NSExt}/Constant/Regexes.cs (100%) rename src/{ => NSExt}/Extensions/ByteExtensions.cs (100%) rename src/{ => NSExt}/Extensions/CharExtensions.cs (100%) rename src/{ => NSExt}/Extensions/DateTimeExtensions.cs (100%) rename src/{ => NSExt}/Extensions/DbCommandExtensions.cs (100%) rename src/{ => NSExt}/Extensions/DecimalExtensions.cs (100%) create mode 100644 src/NSExt/Extensions/EnumExtensions.cs rename src/{ => NSExt}/Extensions/EnumerableExtensions.cs (100%) rename src/{ => NSExt}/Extensions/GenericExtensions.cs (100%) rename src/{ => NSExt}/Extensions/IntExtensions.cs (100%) rename src/{ => NSExt}/Extensions/LoggerExtensions.cs (100%) rename src/{ => NSExt}/Extensions/LongExtensions.cs (100%) rename src/{ => NSExt}/Extensions/ObjectExtensions.cs (100%) rename src/{ => NSExt}/Extensions/StreamExtensions.cs (100%) rename src/{ => NSExt}/Extensions/StringExtensions.cs (100%) rename src/{ => NSExt}/Extensions/TypeExtensions.cs (100%) rename src/{ => NSExt}/Extensions/UriExtensions.cs (100%) rename src/{ => NSExt}/GlobalUsings.cs (100%) create mode 100644 src/NSExt/NSExt.csproj rename src/{ => NSExt}/README.md (100%) diff --git a/CodeQuality.props b/CodeQuality.props index b60e4ed..cf57b8b 100644 --- a/CodeQuality.props +++ b/CodeQuality.props @@ -1,6 +1,6 @@ - ../StyleCopAnalyzers.ruleset + ../../StyleCopAnalyzers.ruleset true true true diff --git a/Directory.Build.props b/Directory.Build.props index dacae8f..dbb8fe9 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,35 +1,13 @@ - ../key.snk + + $(MSBuildThisFileDirectory) nsnail - ../dist - ../dist + $(SolutionDir)/dist/$(MSBuildProjectName)/obj + $(SolutionDir)/dist/$(MSBuildProjectName)/bin © 2006-2023 nsnail - false - A .NET extension function library - true - true false - true - true enable - true - $(BaseIntermediateOutputPath)/$(MSBuildProjectName)/obj - true - $(BaseIntermediateOutputPath)/$(MSBuildProjectName)/obj - $(BaseOutputPath)/$(MSBuildProjectName)/bin - logo.png - MIT - https://github.com/nsnail/ns-ext.git - extensions - NSExt - true - git - https://github.com/nsnail/ns-ext.git - true - snupkg net7.0 - net7.0 - $(AssemblyName) \ No newline at end of file diff --git a/NSExt.sln b/NSExt.sln index ff0d311..107b0bd 100644 --- a/NSExt.sln +++ b/NSExt.sln @@ -3,8 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NSExt", "src\NSExt.csproj", "{70DD1C27-7ACB-4BE0-A9CD-D781E4050DE5}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{85E669CB-FC0A-4C1D-92DE-38D0662C257D}" ProjectSection(SolutionItems) = preProject .editorconfig = .editorconfig @@ -30,6 +28,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{85E669CB-F StyleCopAnalyzers.ruleset = StyleCopAnalyzers.ruleset EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NSExt.Tests", "src\NSExt.Tests\NSExt.Tests.csproj", "{557FBEF6-E6D5-4531-86DF-D772A10E2261}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NSExt", "src\NSExt\NSExt.csproj", "{BA0982BE-6E57-4AAF-9778-F9B2EB46F505}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -39,9 +41,13 @@ Global HideSolutionNode = FALSE EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {70DD1C27-7ACB-4BE0-A9CD-D781E4050DE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {70DD1C27-7ACB-4BE0-A9CD-D781E4050DE5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {70DD1C27-7ACB-4BE0-A9CD-D781E4050DE5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {70DD1C27-7ACB-4BE0-A9CD-D781E4050DE5}.Release|Any CPU.Build.0 = Release|Any CPU + {557FBEF6-E6D5-4531-86DF-D772A10E2261}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {557FBEF6-E6D5-4531-86DF-D772A10E2261}.Debug|Any CPU.Build.0 = Debug|Any CPU + {557FBEF6-E6D5-4531-86DF-D772A10E2261}.Release|Any CPU.ActiveCfg = Release|Any CPU + {557FBEF6-E6D5-4531-86DF-D772A10E2261}.Release|Any CPU.Build.0 = Release|Any CPU + {BA0982BE-6E57-4AAF-9778-F9B2EB46F505}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BA0982BE-6E57-4AAF-9778-F9B2EB46F505}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BA0982BE-6E57-4AAF-9778-F9B2EB46F505}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BA0982BE-6E57-4AAF-9778-F9B2EB46F505}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal \ No newline at end of file diff --git a/src/Extensions/EnumExtensions.cs b/src/Extensions/EnumExtensions.cs deleted file mode 100644 index 96fb0e9..0000000 --- a/src/Extensions/EnumExtensions.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Reflection; -using NSExt.Attributes; - -namespace NSExt.Extensions; - -/// -/// EnumExtensions -/// -public static class EnumExtensions -{ - /// - /// 获取枚举的description属性 - /// - /// 枚举对象 - /// description属性 - public static string Desc(this Enum e) - { - var t = e.GetType(); - var fi = t.GetField(Enum.GetName(t, e)!); - var descAttr = fi!.GetCustomAttribute(true); - if (descAttr is null) { - return Enum.GetName(t, e); - } - - var str = descAttr.Description; - var locAttr = fi!.GetCustomAttribute(true); - return locAttr is null ? str : locAttr.ResourceClass.GetProperty(str)?.GetValue(default) as string ?? str; - } -} \ No newline at end of file diff --git a/src/NSExt.Tests/NSExt.Tests.csproj b/src/NSExt.Tests/NSExt.Tests.csproj new file mode 100644 index 0000000..4c93043 --- /dev/null +++ b/src/NSExt.Tests/NSExt.Tests.csproj @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/NSExt.Tests/TestCase.cs b/src/NSExt.Tests/TestCase.cs new file mode 100644 index 0000000..66f78ea --- /dev/null +++ b/src/NSExt.Tests/TestCase.cs @@ -0,0 +1,41 @@ +using NSExt.Attributes; +using NSExt.Extensions; +using Xunit; +using Xunit.Abstractions; + +namespace NSExt.Tests; + +/// +/// 测试用例 +/// +public class TestCase +{ + private readonly ITestOutputHelper _testOutputHelper; + + public TestCase(ITestOutputHelper testOutputHelper) + { + _testOutputHelper = testOutputHelper; + } + + public enum MyEnum + { + [ResourceDescription(nameof(Description))] + Online = 1 + + , Offline = 2 + } + + public static string Description { get; set; } = "123"; + + /// + /// Case1 + /// + [Fact] + public void Case1() + { + var test = MyEnum.Online.ResDesc(); + + _testOutputHelper.WriteLine(test); + Assert.True(test is not null); + } +} \ No newline at end of file diff --git a/src/NSExt.csproj b/src/NSExt.csproj deleted file mode 100644 index 6d268cb..0000000 --- a/src/NSExt.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - \ No newline at end of file diff --git a/src/Attributes/LocalizationAttribute.cs b/src/NSExt/Attributes/LocalizationAttribute.cs similarity index 100% rename from src/Attributes/LocalizationAttribute.cs rename to src/NSExt/Attributes/LocalizationAttribute.cs diff --git a/src/NSExt/Attributes/ResourceDescriptionAttribute.cs b/src/NSExt/Attributes/ResourceDescriptionAttribute.cs new file mode 100644 index 0000000..8727c95 --- /dev/null +++ b/src/NSExt/Attributes/ResourceDescriptionAttribute.cs @@ -0,0 +1,26 @@ +namespace NSExt.Attributes; + +/// +/// 本地化资源描述特性 +/// +[AttributeUsage(AttributeTargets.Property | AttributeTargets.Class | AttributeTargets.Field)] +public class ResourceDescriptionAttribute : Attribute +{ + /// + /// Initializes a new instance of the class. + /// + public ResourceDescriptionAttribute(string resourceName) + { + ResourceName = resourceName; + } + + /// + /// 资源名称 + /// + public string ResourceName { get; set; } + + /// + /// 资源对象 + /// + public T ResourceObject { get; set; } +} \ No newline at end of file diff --git a/src/Constant/Regexes.cs b/src/NSExt/Constant/Regexes.cs similarity index 100% rename from src/Constant/Regexes.cs rename to src/NSExt/Constant/Regexes.cs diff --git a/src/Extensions/ByteExtensions.cs b/src/NSExt/Extensions/ByteExtensions.cs similarity index 100% rename from src/Extensions/ByteExtensions.cs rename to src/NSExt/Extensions/ByteExtensions.cs diff --git a/src/Extensions/CharExtensions.cs b/src/NSExt/Extensions/CharExtensions.cs similarity index 100% rename from src/Extensions/CharExtensions.cs rename to src/NSExt/Extensions/CharExtensions.cs diff --git a/src/Extensions/DateTimeExtensions.cs b/src/NSExt/Extensions/DateTimeExtensions.cs similarity index 100% rename from src/Extensions/DateTimeExtensions.cs rename to src/NSExt/Extensions/DateTimeExtensions.cs diff --git a/src/Extensions/DbCommandExtensions.cs b/src/NSExt/Extensions/DbCommandExtensions.cs similarity index 100% rename from src/Extensions/DbCommandExtensions.cs rename to src/NSExt/Extensions/DbCommandExtensions.cs diff --git a/src/Extensions/DecimalExtensions.cs b/src/NSExt/Extensions/DecimalExtensions.cs similarity index 100% rename from src/Extensions/DecimalExtensions.cs rename to src/NSExt/Extensions/DecimalExtensions.cs diff --git a/src/NSExt/Extensions/EnumExtensions.cs b/src/NSExt/Extensions/EnumExtensions.cs new file mode 100644 index 0000000..bd1db89 --- /dev/null +++ b/src/NSExt/Extensions/EnumExtensions.cs @@ -0,0 +1,42 @@ +using System.Reflection; +using NSExt.Attributes; + +namespace NSExt.Extensions; + +/// +/// EnumExtensions +/// +public static class EnumExtensions +{ + /// + /// 获取枚举的description属性 + /// + /// 枚举对象 + /// description属性 + public static string Desc(this Enum e) + { + var typeOfEnum = e.GetType(); + var typeOfField = typeOfEnum.GetField(Enum.GetName(typeOfEnum, e)!); + var descAttr = typeOfField!.GetCustomAttribute(true); + if (descAttr is null) { + return Enum.GetName(typeOfEnum, e); + } + + var str = descAttr.Description; + var locAttr = typeOfField!.GetCustomAttribute(true); + return locAttr is null ? str : locAttr.ResourceClass.GetProperty(str)?.GetValue(default) as string ?? str; + } + + /// + /// 获取枚举的本地化资源描述 + /// + public static string ResDesc(this Enum e) + { + var typeOfEnum = e.GetType(); + var typeOfField = typeOfEnum.GetField(Enum.GetName(typeOfEnum, e)!); + var resDescAttr = typeOfField!.GetCustomAttribute>(true); + return resDescAttr is null + ? Enum.GetName(typeOfEnum, e) + : typeof(T).GetProperty(resDescAttr.ResourceName)?.GetValue(default) as string; + } +} \ No newline at end of file diff --git a/src/Extensions/EnumerableExtensions.cs b/src/NSExt/Extensions/EnumerableExtensions.cs similarity index 100% rename from src/Extensions/EnumerableExtensions.cs rename to src/NSExt/Extensions/EnumerableExtensions.cs diff --git a/src/Extensions/GenericExtensions.cs b/src/NSExt/Extensions/GenericExtensions.cs similarity index 100% rename from src/Extensions/GenericExtensions.cs rename to src/NSExt/Extensions/GenericExtensions.cs diff --git a/src/Extensions/IntExtensions.cs b/src/NSExt/Extensions/IntExtensions.cs similarity index 100% rename from src/Extensions/IntExtensions.cs rename to src/NSExt/Extensions/IntExtensions.cs diff --git a/src/Extensions/LoggerExtensions.cs b/src/NSExt/Extensions/LoggerExtensions.cs similarity index 100% rename from src/Extensions/LoggerExtensions.cs rename to src/NSExt/Extensions/LoggerExtensions.cs diff --git a/src/Extensions/LongExtensions.cs b/src/NSExt/Extensions/LongExtensions.cs similarity index 100% rename from src/Extensions/LongExtensions.cs rename to src/NSExt/Extensions/LongExtensions.cs diff --git a/src/Extensions/ObjectExtensions.cs b/src/NSExt/Extensions/ObjectExtensions.cs similarity index 100% rename from src/Extensions/ObjectExtensions.cs rename to src/NSExt/Extensions/ObjectExtensions.cs diff --git a/src/Extensions/StreamExtensions.cs b/src/NSExt/Extensions/StreamExtensions.cs similarity index 100% rename from src/Extensions/StreamExtensions.cs rename to src/NSExt/Extensions/StreamExtensions.cs diff --git a/src/Extensions/StringExtensions.cs b/src/NSExt/Extensions/StringExtensions.cs similarity index 100% rename from src/Extensions/StringExtensions.cs rename to src/NSExt/Extensions/StringExtensions.cs diff --git a/src/Extensions/TypeExtensions.cs b/src/NSExt/Extensions/TypeExtensions.cs similarity index 100% rename from src/Extensions/TypeExtensions.cs rename to src/NSExt/Extensions/TypeExtensions.cs diff --git a/src/Extensions/UriExtensions.cs b/src/NSExt/Extensions/UriExtensions.cs similarity index 100% rename from src/Extensions/UriExtensions.cs rename to src/NSExt/Extensions/UriExtensions.cs diff --git a/src/GlobalUsings.cs b/src/NSExt/GlobalUsings.cs similarity index 100% rename from src/GlobalUsings.cs rename to src/NSExt/GlobalUsings.cs diff --git a/src/NSExt/NSExt.csproj b/src/NSExt/NSExt.csproj new file mode 100644 index 0000000..b5a1ed7 --- /dev/null +++ b/src/NSExt/NSExt.csproj @@ -0,0 +1,35 @@ + + + + ../../key.snk + false + A .NET extension function library + true + true + true + true + true + true + logo.png + MIT + https://github.com/nsnail/ns-ext.git + extensions + NSExt + true + git + https://github.com/nsnail/ns-ext.git + true + snupkg + $(AssemblyName) + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + \ No newline at end of file diff --git a/src/README.md b/src/NSExt/README.md similarity index 100% rename from src/README.md rename to src/NSExt/README.md