From 322bb81356d44dd571c10b4166fdb8677f886833 Mon Sep 17 00:00:00 2001 From: Andrei Ignat Date: Sat, 4 Apr 2026 09:26:36 +0300 Subject: [PATCH 1/3] type providers --- .../Maestria.TypeProviders/description.json | 22 ++++++++++++++ .../Maestria.TypeProviders/src/DemoExcel.slnx | 3 ++ .../src/DemoExcel/DemoExcel.csproj | 27 ++++++++++++++++++ .../src/DemoExcel/MyExcel.xlsx | Bin 0 -> 8736 bytes .../src/DemoExcel/Person.cs | 10 +++++++ .../src/DemoExcel/Program.cs | 1 + 6 files changed, 63 insertions(+) create mode 100644 v2/rscg_examples/Maestria.TypeProviders/description.json create mode 100644 v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel.slnx create mode 100644 v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/DemoExcel.csproj create mode 100644 v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/MyExcel.xlsx create mode 100644 v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/Person.cs create mode 100644 v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/Program.cs diff --git a/v2/rscg_examples/Maestria.TypeProviders/description.json b/v2/rscg_examples/Maestria.TypeProviders/description.json new file mode 100644 index 000000000..4f0eb21b7 --- /dev/null +++ b/v2/rscg_examples/Maestria.TypeProviders/description.json @@ -0,0 +1,22 @@ +{ + "generator":{ + "name":"Maestria.TypeProviders", + "nuget":[ + "https://www.nuget.org/packages/Maestria.TypeProviders/" + ], + "link":"https://github.com/MaestriaNet/TypeProviders", + "author":"Fábio Monteiro Naspolini", + "source":"https://github.com/MaestriaNet/TypeProviders" + }, + "data":{ + "goodFor":["Generating strong typed code from Excel."], + "csprojDemo":"DemoExcel.csproj", + "csFiles":["Program.cs"], + "excludeDirectoryGenerated":[""], + "includeAdditionalFiles":[""] + }, + "links":{ + "blog":"", + "video":"" + } +} \ No newline at end of file diff --git a/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel.slnx b/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel.slnx new file mode 100644 index 000000000..003eeaa59 --- /dev/null +++ b/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel.slnx @@ -0,0 +1,3 @@ + + + diff --git a/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/DemoExcel.csproj b/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/DemoExcel.csproj new file mode 100644 index 000000000..817cfa240 --- /dev/null +++ b/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/DemoExcel.csproj @@ -0,0 +1,27 @@ + + + + Exe + net10.0 + enable + enable + + + + + + + + + + + + PreserveNewest + + + + + true + $(BaseIntermediateOutputPath)\GX + + diff --git a/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/MyExcel.xlsx b/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/MyExcel.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..577167380a42b8509ad07ac25b43d21db4b4e44b GIT binary patch literal 8736 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 literal 0 HcmV?d00001 diff --git a/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/Person.cs b/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/Person.cs new file mode 100644 index 000000000..761680557 --- /dev/null +++ b/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/Person.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace DemoExcel; + +[ExcelProvider(TemplatePath = @"Excel.xlsx")] +public partial class MyExcelPerson +{ +} diff --git a/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/Program.cs b/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/Program.cs new file mode 100644 index 000000000..1bc52a60a --- /dev/null +++ b/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/Program.cs @@ -0,0 +1 @@ +Console.WriteLine("Hello, World!"); From 02dd1d23187a8da421b83c63255ed2b5b11434a1 Mon Sep 17 00:00:00 2001 From: Andrei Ignat Date: Tue, 7 Apr 2026 20:10:46 +0300 Subject: [PATCH 2/3] update to latest version --- .../src/DemoExcel/DemoExcel.csproj | 4 +++- .../src/DemoExcel/MyExcelPerson.cs | 6 ++++++ .../Maestria.TypeProviders/src/DemoExcel/Person.cs | 2 +- .../Maestria.TypeProviders/src/DemoExcel/Program.cs | 11 ++++++++++- 4 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/MyExcelPerson.cs diff --git a/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/DemoExcel.csproj b/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/DemoExcel.csproj index 817cfa240..19c2a2fb1 100644 --- a/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/DemoExcel.csproj +++ b/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/DemoExcel.csproj @@ -10,7 +10,9 @@ - + + all + runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/MyExcelPerson.cs b/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/MyExcelPerson.cs new file mode 100644 index 000000000..3787f5f25 --- /dev/null +++ b/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/MyExcelPerson.cs @@ -0,0 +1,6 @@ +namespace DemoExcel; + +public partial class MyExcelPerson +{ + public string FullName() => $"{FirstName} {LastName}"; +} diff --git a/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/Person.cs b/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/Person.cs index 761680557..d4082932a 100644 --- a/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/Person.cs +++ b/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/Person.cs @@ -4,7 +4,7 @@ namespace DemoExcel; -[ExcelProvider(TemplatePath = @"Excel.xlsx")] +[ExcelProvider(TemplatePath = @"MyExcel.xlsx")] public partial class MyExcelPerson { } diff --git a/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/Program.cs b/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/Program.cs index 1bc52a60a..19ce71c1e 100644 --- a/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/Program.cs +++ b/v2/rscg_examples/Maestria.TypeProviders/src/DemoExcel/Program.cs @@ -1 +1,10 @@ -Console.WriteLine("Hello, World!"); +using DemoExcel; + +Console.WriteLine("Hello, World!"); +var persons = MyExcelPersonFactory.Load("MyExcel.xlsx").ToArray(); + +foreach (var person in persons) +{ + Console.WriteLine(person.ID + person.FullName()); + +} \ No newline at end of file From 5b5a35eda7cc99871176146ccce08f7ce2f74ecd Mon Sep 17 00:00:00 2001 From: Andrei Ignat Date: Tue, 7 Apr 2026 20:11:41 +0300 Subject: [PATCH 3/3] Update description.json --- v2/rscg_examples/Maestria.TypeProviders/description.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v2/rscg_examples/Maestria.TypeProviders/description.json b/v2/rscg_examples/Maestria.TypeProviders/description.json index 4f0eb21b7..6dc958404 100644 --- a/v2/rscg_examples/Maestria.TypeProviders/description.json +++ b/v2/rscg_examples/Maestria.TypeProviders/description.json @@ -11,7 +11,7 @@ "data":{ "goodFor":["Generating strong typed code from Excel."], "csprojDemo":"DemoExcel.csproj", - "csFiles":["Program.cs"], + "csFiles":["Program.cs","MyExcelPerson.cs","Person.cs"], "excludeDirectoryGenerated":[""], "includeAdditionalFiles":[""] },