{"id":70285,"date":"2024-07-22T01:04:53","date_gmt":"2024-07-21T21:34:53","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/using-c-source-code-generators-to-automate-development-tasks-2do5\/"},"modified":"2024-07-22T01:04:53","modified_gmt":"2024-07-21T21:34:53","slug":"using-c-source-code-generators-to-automate-development-tasks-2do5","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/using-c-source-code-generators-to-automate-development-tasks-2do5\/","title":{"rendered":"\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u0646\u062f\u0647 \u06a9\u062f \u0645\u0646\u0628\u0639 C# \u0628\u0631\u0627\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631\u0633\u0627\u0632\u06cc \u0648\u0638\u0627\u06cc\u0641 \u062a\u0648\u0633\u0639\u0647"},"content":{"rendered":"<p>Summarize this content to 400 words in Persian Lang<br \/>\n            Source Generators \u06cc\u06a9 \u0648\u06cc\u0698\u06af\u06cc \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0645\u0639\u0631\u0641\u06cc \u0634\u062f\u0647 \u062f\u0631 C# 9 \u0648 .NET 5 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u062f \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u0648 \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u06a9\u062f C# \u062c\u062f\u06cc\u062f \u0631\u0627 \u062f\u0631 \u0637\u0648\u0644 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u06cc\u062f.  \u0622\u0646\u0647\u0627 \u0628\u0647 \u0648\u06cc\u0698\u0647 \u0628\u0631\u0627\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631\u0633\u0627\u0632\u06cc \u0648\u0638\u0627\u06cc\u0641 \u062a\u06a9\u0631\u0627\u0631\u06cc \u0648 \u0628\u0647\u0628\u0648\u062f \u06a9\u0627\u0631\u0627\u06cc\u06cc \u062a\u0648\u0633\u0639\u0647 \u0645\u0641\u06cc\u062f \u0647\u0633\u062a\u0646\u062f.  \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0646\u062d\u0648\u0647 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 Source Generator \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f \u06a9\u0647 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0634\u0645\u0627\u0631\u0634\u06af\u0631\u0647\u0627 (enums) \u0631\u0627 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0631\u062f\u0647 \u0648 \u0622\u0646 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u06a9\u0646\u0633\u0648\u0644 \u062f\u0627\u062a \u0646\u062a \u0627\u062f\u063a\u0627\u0645 \u06a9\u0646\u062f.<\/p>\n<p>  \u0645\u0646\u0628\u0639 \u0645\u0648\u0644\u062f \u0686\u06cc\u0633\u062a\u061f<\/p>\n<p>Source Generator \u0627\u062c\u0632\u0627\u06cc\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u0646\u062f \u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u06a9\u062f \u0631\u0627 \u0628\u0647 \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.  \u0622\u0646\u0647\u0627 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644\u0631 \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u0646\u062f \u0648 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u06a9\u062f \u0633\u06cc \u0634\u0627\u0631\u067e \u062c\u062f\u06cc\u062f \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u06a9\u062f\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0646\u062f.  \u0627\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0634\u0627\u0645\u0644 \u062a\u0648\u0644\u06cc\u062f \u06a9\u062f \u062f\u06cc\u06af \u0628\u062e\u0627\u0631\u060c \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 \u0648 \u0645\u0648\u0627\u0631\u062f \u062f\u06cc\u06af\u0631 \u0628\u0627\u0634\u062f.  \u0645\u0632\u06cc\u062a \u0627\u0635\u0644\u06cc Source Generators \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u06a9\u0627\u0647\u0634 \u0645\u0642\u062f\u0627\u0631 \u06a9\u062f\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc \u06a9\u0647 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0646\u0648\u0634\u062a\u0646 \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u062f\u0627\u0631\u0646\u062f \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>  \u0645\u0632\u0627\u06cc\u0627\u06cc \u0645\u0648\u0644\u062f\u0647\u0627\u06cc \u0645\u0646\u0628\u0639<\/p>\n<p>Boilerplate Code Automation: \u0645\u0648\u0644\u062f\u0647\u0627\u06cc \u0645\u0646\u0628\u0639 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u062f\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc \u0644\u0627\u0632\u0645 \u0645\u0627\u0646\u0646\u062f \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u060c \u0631\u0648\u0634 \u0647\u0627 \u06cc\u0627 \u062d\u062a\u06cc \u06a9\u0644 \u06a9\u0644\u0627\u0633 \u0647\u0627 \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0646\u062f.  \u0632\u0645\u0627\u0646 \u06a9\u0645\u062a\u0631 \u0628\u0631\u0627\u06cc \u0646\u0648\u0634\u062a\u0646 \u06a9\u062f\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc\u060c \u0632\u0645\u0627\u0646 \u0628\u06cc\u0634\u062a\u0631\u06cc \u0628\u0631\u0627\u06cc \u0646\u0648\u0634\u06cc\u062f\u0646 \u0622\u0646 \u0642\u0647\u0648\u0647 \u062e\u0627\u0635.<br \/>\n\u0628\u0647\u0628\u0648\u062f \u0639\u0645\u0644\u06a9\u0631\u062f: \u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u06a9\u062f \u062f\u0631 \u0632\u0645\u0627\u0646 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u0634\u0648\u062f\u060c \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0647\u06cc\u0686 \u0633\u0631\u0628\u0627\u0631\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0645\u0646\u062c\u0631 \u0628\u0647 \u0628\u0647\u0628\u0648\u062f \u0639\u0645\u0644\u06a9\u0631\u062f \u0634\u0648\u062f.  \u062d\u062a\u06cc \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u06a9\u062f \u0634\u0645\u0627 \u0628\u0631\u0646\u062f\u0647 \u062c\u0627\u06cc\u0632\u0647 \u0628\u0647\u0631\u0647 \u0648\u0631\u06cc \u0634\u0648\u062f.<br \/>\n\u062a\u0639\u0645\u06cc\u0631 \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0622\u0633\u0627\u0646 \u062a\u0631: \u06a9\u0627\u0647\u0634 \u06a9\u062f \u062f\u0633\u062a\u06cc \u0627\u062d\u062a\u0645\u0627\u0644 \u062e\u0637\u0627 \u0631\u0627 \u06a9\u0627\u0647\u0634 \u0645\u06cc \u062f\u0647\u062f \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u06a9\u062f \u0631\u0627 \u0622\u0633\u0627\u0646 \u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f.  \u0627\u0634\u06a9\u0627\u0644\u0627\u062a \u06a9\u0645\u062a\u0631\u060c \u0644\u0628\u062e\u0646\u062f\u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631.<br \/>\n\u0627\u0646\u0639\u0637\u0627\u0641\u200c\u067e\u0630\u06cc\u0631\u06cc: \u0622\u0646\u200c\u0647\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0647\u0627 \u0648 \u0634\u06cc\u0648\u0647\u200c\u0647\u0627\u06cc \u062b\u0627\u0628\u062a\u06cc \u0631\u0627 \u062f\u0631 \u06a9\u0644 \u067e\u0627\u06cc\u06af\u0627\u0647 \u06a9\u062f \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f \u0648 \u0627\u0632 \u0645\u0639\u0645\u0627\u0631\u06cc \u062a\u0645\u06cc\u0632\u062a\u0631 \u0648 \u06a9\u0627\u0631\u0622\u0645\u062f\u062a\u0631 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f.  \u0686\u0647 \u06a9\u0633\u06cc \u06cc\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u06a9\u062f \u0628\u0647 \u062e\u0648\u0628\u06cc \u0633\u0627\u0632\u0645\u0627\u0646\u062f\u0647\u06cc \u0634\u062f\u0647 \u0631\u0627 \u062f\u0648\u0633\u062a \u0646\u062f\u0627\u0631\u062f\u061f<\/p>\n<p>  \u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: Enum Generator<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u062f\u0648 \u067e\u0631\u0648\u0698\u0647 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f:<\/p>\n<p>EnumGenerator &#8211; \u067e\u0631\u0648\u0698\u0647 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u0646\u062f\u0647 \u06a9\u062f \u06a9\u0647 enum \u0647\u0627 \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f.<br \/>\nEnumGeneratorDemoApp &#8211; \u067e\u0631\u0648\u0698\u0647 \u0627\u0635\u0644\u06cc \u06a9\u0647 enum \u0647\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u0631\u0627 \u0645\u0635\u0631\u0641 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0631\u0648\u0698\u0647\u0633\u0627\u062e\u062a\u0627\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f:<\/p>\n<p>EnumGeneratorDemo\/\u251c\u2500\u2500 EnumGenerator\/\u2502   \u251c\u2500\u2500 EnumGenerator.csproj\u2502   \u251c\u2500\u2500 EnumGenerator.cs\u2502   \u2514\u2500\u2500 obj\/\u251c\u2500\u2500 EnumGeneratorDemoApp\/\u2502   \u251c\u2500\u2500 EnumGeneratorDemoApp.csproj\u2502   \u251c\u2500\u2500 Program.cs\u2502   \u2514\u2500\u2500 obj\/\u2514\u2500\u2500 EnumGeneratorDemo.sln<\/p>\n<p>  \u0627\u06cc\u062c\u0627\u062f \u0648 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645<\/p>\n<p>  1. \u0627\u06cc\u062c\u0627\u062f \u0633\u0627\u062e\u062a\u0627\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc<\/p>\n<p>\u06cc\u06a9 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<p>mkdir EnumGeneratorDemo<br \/>\ncd EnumGeneratorDemo<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u06cc\u062c\u0627\u062f \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u0646\u062f\u0647 \u06a9\u062f \u0648 \u0628\u0631\u0646\u0627\u0645\u0647:<\/p>\n<p>mkdir EnumGenerator<br \/>\nmkdir EnumGeneratorDemoApp<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  2. \u0627\u06cc\u062c\u0627\u062f \u067e\u0631\u0648\u0698\u0647 EnumGenerator<\/p>\n<p>\u0628\u0647 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc EnumGenerator \u0628\u0631\u0648\u06cc\u062f \u0648 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u06a9\u0644\u0627\u0633 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<p>cd EnumGeneratordotnet new classlib -n EnumGenerator<\/p>\n<p>\u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0631\u0627 \u062f\u0631 \u0642\u0633\u0645\u062a \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f EnumGenerator.csproj \u0641\u0627\u06cc\u0644:<\/p>\n<p> Sdk=&#8221;Microsoft.NET.Sdk&#8221;&gt;<\/p>\n<p>    net8.0<br \/>\n    enable<br \/>\n    enable<br \/>\n    true<\/p>\n<p>     Include=&#8221;Microsoft.CodeAnalysis.Analyzers&#8221; Version=&#8221;3.3.4&#8243;&gt;<br \/>\n      runtime; build; native; contentfiles; analyzers; buildtransitive<br \/>\n      all<\/p>\n<p>     Include=&#8221;Microsoft.CodeAnalysis.CSharp&#8221; Version=&#8221;4.10.0&#8243; \/&gt;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f EnumGenerator.cs \u0641\u0627\u06cc\u0644 \u0628\u0627 \u0645\u062d\u062a\u0648\u0627\u06cc \u0632\u06cc\u0631:<\/p>\n<p>using Microsoft.CodeAnalysis;<br \/>\nusing Microsoft.CodeAnalysis.Text;<br \/>\nusing System.Linq;<br \/>\nusing System.Text;<\/p>\n<p>namespace EnumGenerator<br \/>\n{<br \/>\n    [Generator]\n    public class EnumGenerator : ISourceGenerator<br \/>\n    {<br \/>\n        public void Initialize(GeneratorInitializationContext context)<br \/>\n        {<br \/>\n            System.Diagnostics.Debug.WriteLine(&#8220;EnumGenerator initialized&#8221;);<br \/>\n        }<\/p>\n<p>        public void Execute(GeneratorExecutionContext context)<br \/>\n        {<br \/>\n            System.Diagnostics.Debug.WriteLine(&#8220;EnumGenerator is running!&#8221;);<\/p>\n<p>            var enums = new[]\n            {<br \/>\n                new { Name = &#8220;OrderStatus&#8221;, Values = new[] { &#8220;Pending&#8221;, &#8220;Processing&#8221;, &#8220;Shipped&#8221;, &#8220;Delivered&#8221;, &#8220;Cancelled&#8221; } },<br \/>\n                new { Name = &#8220;UserRole&#8221;, Values = new[] { &#8220;Admin&#8221;, &#8220;User&#8221;, &#8220;Guest&#8221; } }<br \/>\n            };<\/p>\n<p>            foreach (var enumDef in enums)<br \/>\n            {<br \/>\n                var source = GenerateEnumSource(enumDef.Name, enumDef.Values);<br \/>\n                context.AddSource($&#8221;{enumDef.Name}.g.cs&#8221;, SourceText.From(source, Encoding.UTF8));<br \/>\n                System.Diagnostics.Debug.WriteLine($&#8221;Generated {enumDef.Name}.g.cs&#8221;);<br \/>\n            }<br \/>\n        }<\/p>\n<p>        private string GenerateEnumSource(string enumName, string[] values)<br \/>\n        {<br \/>\n            var enumValues = string.Join(&#8220;,\\n    &#8220;, values);<br \/>\n            return $@&#8221;<br \/>\nnamespace EnumGeneratorDemoApp.Enums<br \/>\n{{<br \/>\n    public enum {enumName}<br \/>\n    {{<br \/>\n        {enumValues}<br \/>\n    }}<br \/>\n}}<br \/>\n&#8220;;<br \/>\n        }<br \/>\n    }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  3. \u0627\u06cc\u062c\u0627\u062f \u067e\u0631\u0648\u0698\u0647 EnumGeneratorDemoApp<\/p>\n<p>\u0628\u0647 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc EnumGeneratorDemoApp \u0628\u0631\u0648\u06cc\u062f \u0648 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u06a9\u0646\u0633\u0648\u0644 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<p>cd ..\/EnumGeneratorDemoApp<br \/>\ndotnet new console -n EnumGeneratorDemoApp<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0645\u0631\u062c\u0639 \u0631\u0627 \u0628\u0647 EnumGenerator \u067e\u0631\u0648\u0698\u0647 \u062f\u0631 EnumGeneratorDemoApp.csproj \u0641\u0627\u06cc\u0644:<\/p>\n<p> Sdk=&#8221;Microsoft.NET.Sdk&#8221;&gt;<\/p>\n<p>    Exe<br \/>\n    net8.0<br \/>\n    enable<br \/>\n    enable<\/p>\n<p>     Include=&#8221;..\\EnumGenerator\\EnumGenerator.csproj&#8221; OutputItemType=&#8221;Analyzer&#8221; ReferenceOutputAssembly=&#8221;false&#8221; \/&gt;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f Program.cs \u0641\u0627\u06cc\u0644 \u0628\u0627 \u0645\u062d\u062a\u0648\u0627\u06cc \u0632\u06cc\u0631:<\/p>\n<p>using EnumGeneratorDemoApp.Enums;<br \/>\nusing System;<\/p>\n<p>namespace EnumGeneratorDemoApp<br \/>\n{<br \/>\n    class Program<br \/>\n    {<br \/>\n        static void Main(string[] args)<br \/>\n        {<br \/>\n            var order = new Order<br \/>\n            {<br \/>\n                Id = Guid.NewGuid(),<br \/>\n                Status = OrderStatus.Pending<br \/>\n            };<\/p>\n<p>            var user = new User<br \/>\n            {<br \/>\n                Id = Guid.NewGuid(),<br \/>\n                Role = UserRole.Admin<br \/>\n            };<\/p>\n<p>            Console.WriteLine($&#8221;Order ID: {order.Id}, Status: {order.Status}&#8221;);<br \/>\n            Console.WriteLine($&#8221;User ID: {user.Id}, Role: {user.Role}&#8221;);<br \/>\n        }<br \/>\n    }<\/p>\n<p>    public class Order<br \/>\n    {<br \/>\n        public Guid Id { get; set; }<br \/>\n        public OrderStatus Status { get; set; }<br \/>\n    }<\/p>\n<p>    public class User<br \/>\n    {<br \/>\n        public Guid Id { get; set; }<br \/>\n        public UserRole Role { get; set; }<br \/>\n    }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  4. \u0627\u06cc\u062c\u0627\u062f \u0631\u0627\u0647 \u062d\u0644 \u0648 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u067e\u0631\u0648\u0698\u0647 \u0647\u0627<\/p>\n<p>\u0628\u0647 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc EnumGeneratorDemo \u0628\u0631\u06af\u0631\u062f\u06cc\u062f \u0648 \u06cc\u06a9 \u0631\u0627\u0647 \u062d\u0644 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<p>cd ..<br \/>\ndotnet new sln -n EnumGeneratorDemo<br \/>\ndotnet sln add EnumGenerator\/EnumGenerator.csproj<br \/>\ndotnet sln add EnumGeneratorDemoApp\/EnumGeneratorDemoApp.csproj<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  5. \u062a\u062f\u0648\u06cc\u0646 \u0648 \u0627\u062c\u0631\u0627<\/p>\n<p>\u0627\u0628\u062a\u062f\u0627 \u067e\u0631\u0648\u0698\u0647 EnumGenerator \u0631\u0627 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>cd EnumGenerator<br \/>\ndotnet build<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u067e\u0631\u0648\u0698\u0647 \u0627\u0635\u0644\u06cc EnumGeneratorDemoApp \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f:<\/p>\n<p>cd ..\/EnumGeneratorDemoApp<br \/>\ndotnet build<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u062c\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0627\u0635\u0644\u06cc:<\/p>\n<p>dotnet run<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  6. \u062a\u0627\u06cc\u06cc\u062f \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647<\/p>\n<p>\u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u0633\u062a\u06cc \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc .g.cs \u062f\u0631 \u067e\u0648\u0634\u0647 obj \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647\u200c\u0627\u0646\u062f EnumGeneratorDemoApp \u067e\u0631\u0648\u0698\u0647:<\/p>\n<p>cd EnumGeneratorDemoApp\/obj\/Debug\/net8.0\/generated\/EnumGeneratorDemoApp\/<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0646\u062a\u06cc\u062c\u0647<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0628\u0647 \u0628\u0631\u0631\u0633\u06cc \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0645\u06cc \u067e\u0631\u062f\u0627\u0632\u06cc\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 Source Generators \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0634\u06cc\u0648\u0647 \u0646\u0648\u0634\u062a\u0646 \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u06a9\u062f \u062f\u0631 \u0633\u06cc \u0634\u0627\u0631\u067e \u0631\u0627 \u0645\u062a\u062d\u0648\u0644 \u06a9\u0646\u062f.  \u0628\u0627 \u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc \u062e\u0648\u062f\u060c \u0646\u062d\u0648\u0647 \u0627\u06cc\u062c\u0627\u062f \u0648 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06cc\u06a9 \u0645\u0648\u0644\u062f enum \u0631\u0627 \u062f\u06cc\u062f\u06cc\u0645 \u06a9\u0647 \u0627\u06cc\u062c\u0627\u062f \u0634\u0645\u0627\u0631\u0634\u06af\u0631\u0647\u0627 \u0631\u0627 \u062f\u0631 \u062d\u06cc\u0646 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0646\u0648\u0634\u062a\u0646 \u06a9\u062f\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc \u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u0633\u062a\u06cc \u0631\u0627 \u06a9\u0627\u0647\u0634 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>\u0698\u0646\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0645\u0646\u0628\u0639 \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u06cc \u0627\u0632 \u0645\u0632\u0627\u06cc\u0627 \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u0646\u062f\u060c \u0627\u0632 \u0628\u0647\u0628\u0648\u062f \u0639\u0645\u0644\u06a9\u0631\u062f \u06af\u0631\u0641\u062a\u0647 \u062a\u0627 \u0633\u0647\u0648\u0644\u062a \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0648 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0633\u0627\u0632\u06cc \u06a9\u062f.  \u0628\u0627 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u0631\u062f\u0646 \u06a9\u0627\u0631\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc \u0648 \u062e\u0633\u062a\u0647 \u06a9\u0646\u0646\u062f\u0647\u060c \u0632\u0645\u0627\u0646 \u0628\u06cc\u0634\u062a\u0631\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0628\u062e\u0634 \u0647\u0627\u06cc \u0648\u0627\u0642\u0639\u0627 \u0645\u0647\u0645 \u0648 \u062e\u0644\u0627\u0642\u0627\u0646\u0647 \u062a\u0648\u0633\u0639\u0647 \u0646\u0631\u0645 \u0627\u0641\u0632\u0627\u0631 \u0622\u0632\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u0627\u0646\u0639\u0637\u0627\u0641\u200c\u067e\u0630\u06cc\u0631\u06cc Source Generators \u0628\u0647 \u200b\u200b\u0634\u0645\u0627 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f \u062a\u0627 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0647\u0627 \u0648 \u0634\u06cc\u0648\u0647\u200c\u0647\u0627\u06cc \u062b\u0627\u0628\u062a\u06cc \u0631\u0627 \u062f\u0631 \u06a9\u0644 \u067e\u0627\u06cc\u06af\u0627\u0647 \u06a9\u062f \u062e\u0648\u062f \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f \u0648 \u0645\u0639\u0645\u0627\u0631\u06cc \u062a\u0645\u06cc\u0632\u062a\u0631 \u0648 \u06a9\u0627\u0631\u0622\u0645\u062f\u062a\u0631 \u0631\u0627 \u0627\u0631\u062a\u0642\u0627 \u062f\u0647\u06cc\u062f.  \u062f\u0646\u06cc\u0627\u06cc\u06cc \u0631\u0627 \u062a\u0635\u0648\u0631 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0646\u06cc\u0627\u0632\u06cc \u0646\u06cc\u0633\u062a \u0646\u06af\u0631\u0627\u0646 \u062a\u0648\u0644\u06cc\u062f \u06a9\u062f \u062f\u06cc\u06af \u0628\u062e\u0627\u0631 \u0628\u0627\u0634\u06cc\u062f \u0648 \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u0631\u0648\u06cc \u062a\u0648\u0633\u0639\u0647 \u0631\u0627\u0647 \u062d\u0644 \u0647\u0627\u06cc \u0646\u0648\u0622\u0648\u0631\u0627\u0646\u0647 \u0648 \u0642\u0648\u06cc \u062a\u0645\u0631\u06a9\u0632 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u062a\u06a9\u0645\u06cc\u0644 \u06a9\u0627\u0648\u0634 \u062e\u0648\u062f \u062f\u0631 Source Generators\u060c \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0645 \u0627\u0632 \u0645\u062e\u0632\u0646 amis92\/csharp-source-generators \u062f\u06cc\u062f\u0646 \u06a9\u0646\u06cc\u062f\u060c \u06a9\u0647 \u062d\u0627\u0648\u06cc \u0686\u0646\u062f\u06cc\u0646 \u0646\u0645\u0648\u0646\u0647 \u0648 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u062a\u0648\u0633\u0639\u0647 \u06a9\u0645\u06a9 \u06a9\u0646\u062f.<\/p>\n<p>\u0627\u06af\u0631 \u0647\u0646\u0648\u0632 Source Generators \u0631\u0627 \u0627\u0645\u062a\u062d\u0627\u0646 \u0646\u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f\u060c \u0627\u06a9\u0646\u0648\u0646 \u0632\u0645\u0627\u0646 \u0622\u0646 \u0641\u0631\u0627 \u0631\u0633\u06cc\u062f\u0647 \u0627\u0633\u062a.  \u0622\u0646\u0647\u0627 \u0646\u0647 \u062a\u0646\u0647\u0627 \u0628\u0647\u0631\u0647 \u0648\u0631\u06cc \u0634\u0645\u0627 \u0631\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u0645\u06cc \u062f\u0647\u0646\u062f \u0628\u0644\u06a9\u0647 \u06a9\u06cc\u0641\u06cc\u062a \u06a9\u062f \u0634\u0645\u0627 \u0631\u0627 \u0646\u06cc\u0632 \u0628\u0647\u0628\u0648\u062f \u0645\u06cc \u0628\u062e\u0634\u0646\u062f.  \u0648 \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u06cc\u062f\u06cc\u0645\u060c \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647\u060c \u0628\u0647\u200c\u0648\u06cc\u0698\u0647 \u0628\u0627 \u0642\u062f\u0631\u062a \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u0648 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647\u200c\u0647\u0627\u06cc \u062f\u0627\u062a\u200c\u0646\u062a\u060c \u0633\u0627\u062f\u0647 \u0648 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u06a9\u062f \u0646\u0645\u0648\u0646\u0647 \u06a9\u0627\u0645\u0644 \u0645\u0648\u0631\u062f \u0628\u062d\u062b \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0627\u0632 Alisson Podgurski GitHub \u0645\u0646 \u062f\u06cc\u062f\u0646 \u06a9\u0646\u06cc\u062f.  \u0645\u0646 \u0645\u062b\u0627\u0644 \u0631\u0627 \u0628\u06cc\u0634\u062a\u0631 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u0645 \u062a\u0627 \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u062e\u0648\u062f\u062a\u0627\u0646 \u0622\u0646 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u0648\u0644\u062f\u0647\u0627\u06cc \u0645\u0646\u0628\u0639 \u0631\u0627 \u06a9\u0627\u0648\u0634 \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0628\u06cc\u0646\u06cc\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0634\u0645\u0627 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u0646\u062f.  \u067e\u0627\u06cc\u06af\u0627\u0647 \u06a9\u062f \u0648 \u0639\u0642\u0644 \u0634\u0645\u0627 \u0627\u0632 \u0634\u0645\u0627 \u062a\u0634\u06a9\u0631 \u062e\u0648\u0627\u0647\u062f \u06a9\u0631\u062f!<\/p>\n<div data-article-id=\"1931105\" id=\"article-body\">\n<p>Source Generators \u06cc\u06a9 \u0648\u06cc\u0698\u06af\u06cc \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0645\u0639\u0631\u0641\u06cc \u0634\u062f\u0647 \u062f\u0631 C# 9 \u0648 .NET 5 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u062f \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u0648 \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u06a9\u062f C# \u062c\u062f\u06cc\u062f \u0631\u0627 \u062f\u0631 \u0637\u0648\u0644 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u06cc\u062f.  \u0622\u0646\u0647\u0627 \u0628\u0647 \u0648\u06cc\u0698\u0647 \u0628\u0631\u0627\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631\u0633\u0627\u0632\u06cc \u0648\u0638\u0627\u06cc\u0641 \u062a\u06a9\u0631\u0627\u0631\u06cc \u0648 \u0628\u0647\u0628\u0648\u062f \u06a9\u0627\u0631\u0627\u06cc\u06cc \u062a\u0648\u0633\u0639\u0647 \u0645\u0641\u06cc\u062f \u0647\u0633\u062a\u0646\u062f.  \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0646\u062d\u0648\u0647 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 Source Generator \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f \u06a9\u0647 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0634\u0645\u0627\u0631\u0634\u06af\u0631\u0647\u0627 (enums) \u0631\u0627 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0631\u062f\u0647 \u0648 \u0622\u0646 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u06a9\u0646\u0633\u0648\u0644 \u062f\u0627\u062a \u0646\u062a \u0627\u062f\u063a\u0627\u0645 \u06a9\u0646\u062f.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/using-c-source-code-generators-to-automate-development-tasks-2do5\/#%D9%85%D9%86%D8%A8%D8%B9_%D9%85%D9%88%D9%84%D8%AF_%DA%86%DB%8C%D8%B3%D8%AA%D8%9F\" >\u0645\u0646\u0628\u0639 \u0645\u0648\u0644\u062f \u0686\u06cc\u0633\u062a\u061f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/using-c-source-code-generators-to-automate-development-tasks-2do5\/#%D9%85%D8%B2%D8%A7%DB%8C%D8%A7%DB%8C_%D9%85%D9%88%D9%84%D8%AF%D9%87%D8%A7%DB%8C_%D9%85%D9%86%D8%A8%D8%B9\" >\u0645\u0632\u0627\u06cc\u0627\u06cc \u0645\u0648\u0644\u062f\u0647\u0627\u06cc \u0645\u0646\u0628\u0639<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/using-c-source-code-generators-to-automate-development-tasks-2do5\/#%D9%85%D8%AB%D8%A7%D9%84_%D8%B9%D9%85%D9%84%DB%8C_Enum_Generator\" >\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: Enum Generator<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/using-c-source-code-generators-to-automate-development-tasks-2do5\/#%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D9%88_%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C_%DA%AF%D8%A7%D9%85_%D8%A8%D9%87_%DA%AF%D8%A7%D9%85\" >\u0627\u06cc\u062c\u0627\u062f \u0648 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/using-c-source-code-generators-to-automate-development-tasks-2do5\/#1_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D8%B3%D8%A7%D8%AE%D8%AA%D8%A7%D8%B1_%D8%AF%D8%A7%DB%8C%D8%B1%DA%A9%D8%AA%D9%88%D8%B1%DB%8C\" >1. \u0627\u06cc\u062c\u0627\u062f \u0633\u0627\u062e\u062a\u0627\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/using-c-source-code-generators-to-automate-development-tasks-2do5\/#2_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D9%BE%D8%B1%D9%88%DA%98%D9%87_EnumGenerator\" >2. \u0627\u06cc\u062c\u0627\u062f \u067e\u0631\u0648\u0698\u0647 EnumGenerator<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/using-c-source-code-generators-to-automate-development-tasks-2do5\/#3_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D9%BE%D8%B1%D9%88%DA%98%D9%87_EnumGeneratorDemoApp\" >3. \u0627\u06cc\u062c\u0627\u062f \u067e\u0631\u0648\u0698\u0647 EnumGeneratorDemoApp<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/using-c-source-code-generators-to-automate-development-tasks-2do5\/#4_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D8%B1%D8%A7%D9%87_%D8%AD%D9%84_%D9%88_%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D8%B1%D8%AF%D9%86_%D9%BE%D8%B1%D9%88%DA%98%D9%87_%D9%87%D8%A7\" >4. \u0627\u06cc\u062c\u0627\u062f \u0631\u0627\u0647 \u062d\u0644 \u0648 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u067e\u0631\u0648\u0698\u0647 \u0647\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/using-c-source-code-generators-to-automate-development-tasks-2do5\/#5_%D8%AA%D8%AF%D9%88%DB%8C%D9%86_%D9%88_%D8%A7%D8%AC%D8%B1%D8%A7\" >5. \u062a\u062f\u0648\u06cc\u0646 \u0648 \u0627\u062c\u0631\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/using-c-source-code-generators-to-automate-development-tasks-2do5\/#6_%D8%AA%D8%A7%DB%8C%DB%8C%D8%AF_%D9%81%D8%A7%DB%8C%D9%84_%D9%87%D8%A7%DB%8C_%D8%AA%D9%88%D9%84%DB%8C%D8%AF_%D8%B4%D8%AF%D9%87\" >6. \u062a\u0627\u06cc\u06cc\u062f \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/using-c-source-code-generators-to-automate-development-tasks-2do5\/#%D9%86%D8%AA%DB%8C%D8%AC%D9%87\" >\u0646\u062a\u06cc\u062c\u0647<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D9%86%D8%A8%D8%B9_%D9%85%D9%88%D9%84%D8%AF_%DA%86%DB%8C%D8%B3%D8%AA%D8%9F\"><\/span>\n<p>  \u0645\u0646\u0628\u0639 \u0645\u0648\u0644\u062f \u0686\u06cc\u0633\u062a\u061f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Source Generator \u0627\u062c\u0632\u0627\u06cc\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u0646\u062f \u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u06a9\u062f \u0631\u0627 \u0628\u0647 \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.  \u0622\u0646\u0647\u0627 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644\u0631 \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u0646\u062f \u0648 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u06a9\u062f \u0633\u06cc \u0634\u0627\u0631\u067e \u062c\u062f\u06cc\u062f \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u06a9\u062f\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0646\u062f.  \u0627\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0634\u0627\u0645\u0644 \u062a\u0648\u0644\u06cc\u062f \u06a9\u062f \u062f\u06cc\u06af \u0628\u062e\u0627\u0631\u060c \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 \u0648 \u0645\u0648\u0627\u0631\u062f \u062f\u06cc\u06af\u0631 \u0628\u0627\u0634\u062f.  \u0645\u0632\u06cc\u062a \u0627\u0635\u0644\u06cc Source Generators \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u06a9\u0627\u0647\u0634 \u0645\u0642\u062f\u0627\u0631 \u06a9\u062f\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc \u06a9\u0647 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0646\u0648\u0634\u062a\u0646 \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u062f\u0627\u0631\u0646\u062f \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D8%B2%D8%A7%DB%8C%D8%A7%DB%8C_%D9%85%D9%88%D9%84%D8%AF%D9%87%D8%A7%DB%8C_%D9%85%D9%86%D8%A8%D8%B9\"><\/span>\n<p>  \u0645\u0632\u0627\u06cc\u0627\u06cc \u0645\u0648\u0644\u062f\u0647\u0627\u06cc \u0645\u0646\u0628\u0639<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>\n<p>Boilerplate Code Automation: \u0645\u0648\u0644\u062f\u0647\u0627\u06cc \u0645\u0646\u0628\u0639 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u062f\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc \u0644\u0627\u0632\u0645 \u0645\u0627\u0646\u0646\u062f \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u060c \u0631\u0648\u0634 \u0647\u0627 \u06cc\u0627 \u062d\u062a\u06cc \u06a9\u0644 \u06a9\u0644\u0627\u0633 \u0647\u0627 \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0646\u062f.  \u0632\u0645\u0627\u0646 \u06a9\u0645\u062a\u0631 \u0628\u0631\u0627\u06cc \u0646\u0648\u0634\u062a\u0646 \u06a9\u062f\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc\u060c \u0632\u0645\u0627\u0646 \u0628\u06cc\u0634\u062a\u0631\u06cc \u0628\u0631\u0627\u06cc \u0646\u0648\u0634\u06cc\u062f\u0646 \u0622\u0646 \u0642\u0647\u0648\u0647 \u062e\u0627\u0635.<\/p>\n<\/li>\n<li>\n<p>\u0628\u0647\u0628\u0648\u062f \u0639\u0645\u0644\u06a9\u0631\u062f: \u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u06a9\u062f \u062f\u0631 \u0632\u0645\u0627\u0646 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u0634\u0648\u062f\u060c \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0647\u06cc\u0686 \u0633\u0631\u0628\u0627\u0631\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0645\u0646\u062c\u0631 \u0628\u0647 \u0628\u0647\u0628\u0648\u062f \u0639\u0645\u0644\u06a9\u0631\u062f \u0634\u0648\u062f.  \u062d\u062a\u06cc \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u06a9\u062f \u0634\u0645\u0627 \u0628\u0631\u0646\u062f\u0647 \u062c\u0627\u06cc\u0632\u0647 \u0628\u0647\u0631\u0647 \u0648\u0631\u06cc \u0634\u0648\u062f.<\/p>\n<\/li>\n<li>\n<p>\u062a\u0639\u0645\u06cc\u0631 \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0622\u0633\u0627\u0646 \u062a\u0631: \u06a9\u0627\u0647\u0634 \u06a9\u062f \u062f\u0633\u062a\u06cc \u0627\u062d\u062a\u0645\u0627\u0644 \u062e\u0637\u0627 \u0631\u0627 \u06a9\u0627\u0647\u0634 \u0645\u06cc \u062f\u0647\u062f \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u06a9\u062f \u0631\u0627 \u0622\u0633\u0627\u0646 \u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f.  \u0627\u0634\u06a9\u0627\u0644\u0627\u062a \u06a9\u0645\u062a\u0631\u060c \u0644\u0628\u062e\u0646\u062f\u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631.<\/p>\n<\/li>\n<li>\n<p>\u0627\u0646\u0639\u0637\u0627\u0641\u200c\u067e\u0630\u06cc\u0631\u06cc: \u0622\u0646\u200c\u0647\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0647\u0627 \u0648 \u0634\u06cc\u0648\u0647\u200c\u0647\u0627\u06cc \u062b\u0627\u0628\u062a\u06cc \u0631\u0627 \u062f\u0631 \u06a9\u0644 \u067e\u0627\u06cc\u06af\u0627\u0647 \u06a9\u062f \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f \u0648 \u0627\u0632 \u0645\u0639\u0645\u0627\u0631\u06cc \u062a\u0645\u06cc\u0632\u062a\u0631 \u0648 \u06a9\u0627\u0631\u0622\u0645\u062f\u062a\u0631 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f.  \u0686\u0647 \u06a9\u0633\u06cc \u06cc\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u06a9\u062f \u0628\u0647 \u062e\u0648\u0628\u06cc \u0633\u0627\u0632\u0645\u0627\u0646\u062f\u0647\u06cc \u0634\u062f\u0647 \u0631\u0627 \u062f\u0648\u0633\u062a \u0646\u062f\u0627\u0631\u062f\u061f<\/p>\n<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D8%AB%D8%A7%D9%84_%D8%B9%D9%85%D9%84%DB%8C_Enum_Generator\"><\/span>\n<p>  \u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: Enum Generator<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u062f\u0648 \u067e\u0631\u0648\u0698\u0647 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f:<\/p>\n<ol>\n<li>EnumGenerator &#8211; \u067e\u0631\u0648\u0698\u0647 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u0646\u062f\u0647 \u06a9\u062f \u06a9\u0647 enum \u0647\u0627 \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>EnumGeneratorDemoApp &#8211; \u067e\u0631\u0648\u0698\u0647 \u0627\u0635\u0644\u06cc \u06a9\u0647 enum \u0647\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u0631\u0627 \u0645\u0635\u0631\u0641 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<\/ol>\n<p>\u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0631\u0648\u0698\u0647<br \/>\u0633\u0627\u062e\u062a\u0627\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f:<\/p>\n<p><code>EnumGeneratorDemo\/<br \/>\u251c\u2500\u2500 EnumGenerator\/<br \/>\u2502   \u251c\u2500\u2500 EnumGenerator.csproj<br \/>\u2502   \u251c\u2500\u2500 EnumGenerator.cs<br \/>\u2502   \u2514\u2500\u2500 obj\/<br \/>\u251c\u2500\u2500 EnumGeneratorDemoApp\/<br \/>\u2502   \u251c\u2500\u2500 EnumGeneratorDemoApp.csproj<br \/>\u2502   \u251c\u2500\u2500 Program.cs<br \/>\u2502   \u2514\u2500\u2500 obj\/<br \/>\u2514\u2500\u2500 EnumGeneratorDemo.sln<\/code><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D9%88_%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C_%DA%AF%D8%A7%D9%85_%D8%A8%D9%87_%DA%AF%D8%A7%D9%85\"><\/span>\n<p>  \u0627\u06cc\u062c\u0627\u062f \u0648 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h2><span class=\"ez-toc-section\" id=\"1_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D8%B3%D8%A7%D8%AE%D8%AA%D8%A7%D8%B1_%D8%AF%D8%A7%DB%8C%D8%B1%DA%A9%D8%AA%D9%88%D8%B1%DB%8C\"><\/span>\n<p>  1. \u0627\u06cc\u062c\u0627\u062f \u0633\u0627\u062e\u062a\u0627\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u06cc\u06a9 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>mkdir EnumGeneratorDemo\ncd EnumGeneratorDemo\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u062c\u0627\u062f \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u0646\u062f\u0647 \u06a9\u062f \u0648 \u0628\u0631\u0646\u0627\u0645\u0647:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>mkdir EnumGenerator\nmkdir EnumGeneratorDemoApp\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"2_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D9%BE%D8%B1%D9%88%DA%98%D9%87_EnumGenerator\"><\/span>\n<p>  2. \u0627\u06cc\u062c\u0627\u062f \u067e\u0631\u0648\u0698\u0647 EnumGenerator<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0647 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc EnumGenerator \u0628\u0631\u0648\u06cc\u062f \u0648 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u06a9\u0644\u0627\u0633 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<p><code>cd EnumGenerator<br \/>dotnet new classlib -n EnumGenerator<\/code><\/p>\n<p>\u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0631\u0627 \u062f\u0631 \u0642\u0633\u0645\u062a \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f <strong>EnumGenerator.csproj<\/strong> \u0641\u0627\u06cc\u0644:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight xml\"><code><span class=\"nt\"><project> <span class=\"na\">Sdk=<\/span><span class=\"s\">\"Microsoft.NET.Sdk\"<\/span><span class=\"nt\">&gt;<\/span>\n\n  <span class=\"nt\"><propertygroup\/><\/span>\n    <span class=\"nt\"><targetframework\/><\/span>net8.0<span class=\"nt\"\/>\n    <span class=\"nt\"><implicitusings\/><\/span>enable<span class=\"nt\"\/>\n    <span class=\"nt\"><nullable\/><\/span>enable<span class=\"nt\"\/>\n    <span class=\"nt\"><enforceextendedanalyzerrules\/><\/span>true<span class=\"nt\"\/>\n  <span class=\"nt\"\/>\n\n  <span class=\"nt\"><itemgroup\/><\/span>\n    <span class=\"nt\"><packagereference> <span class=\"na\">Include=<\/span><span class=\"s\">\"Microsoft.CodeAnalysis.Analyzers\"<\/span> <span class=\"na\">Version=<\/span><span class=\"s\">\"3.3.4\"<\/span><span class=\"nt\">&gt;<\/span>\n      <span class=\"nt\"><includeassets\/><\/span>runtime; build; native; contentfiles; analyzers; buildtransitive<span class=\"nt\"\/>\n      <span class=\"nt\"><privateassets\/><\/span>all<span class=\"nt\"\/>\n    <span class=\"nt\"\/><\/packagereference><\/span>\n    <span class=\"nt\"><packagereference> <span class=\"na\">Include=<\/span><span class=\"s\">\"Microsoft.CodeAnalysis.CSharp\"<\/span> <span class=\"na\">Version=<\/span><span class=\"s\">\"4.10.0\"<\/span> <span class=\"nt\">\/&gt;<\/span>\n  <span class=\"nt\"\/>\n\n<span class=\"nt\"\/><\/packagereference><\/span><\/project><\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f <strong>EnumGenerator.cs<\/strong> \u0641\u0627\u06cc\u0644 \u0628\u0627 \u0645\u062d\u062a\u0648\u0627\u06cc \u0632\u06cc\u0631:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"k\">using<\/span> <span class=\"nn\">Microsoft.CodeAnalysis<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">using<\/span> <span class=\"nn\">Microsoft.CodeAnalysis.Text<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">using<\/span> <span class=\"nn\">System.Linq<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">using<\/span> <span class=\"nn\">System.Text<\/span><span class=\"p\">;<\/span>\n\n<span class=\"k\">namespace<\/span> <span class=\"nn\">EnumGenerator<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"p\">[<\/span><span class=\"n\">Generator<\/span><span class=\"p\">]<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">EnumGenerator<\/span> <span class=\"p\">:<\/span> <span class=\"n\">ISourceGenerator<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">public<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">Initialize<\/span><span class=\"p\">(<\/span><span class=\"n\">GeneratorInitializationContext<\/span> <span class=\"n\">context<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"n\">Diagnostics<\/span><span class=\"p\">.<\/span><span class=\"n\">Debug<\/span><span class=\"p\">.<\/span><span class=\"nf\">WriteLine<\/span><span class=\"p\">(<\/span><span class=\"s\">\"EnumGenerator initialized\"<\/span><span class=\"p\">);<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"k\">public<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">Execute<\/span><span class=\"p\">(<\/span><span class=\"n\">GeneratorExecutionContext<\/span> <span class=\"n\">context<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"n\">Diagnostics<\/span><span class=\"p\">.<\/span><span class=\"n\">Debug<\/span><span class=\"p\">.<\/span><span class=\"nf\">WriteLine<\/span><span class=\"p\">(<\/span><span class=\"s\">\"EnumGenerator is running!\"<\/span><span class=\"p\">);<\/span>\n\n            <span class=\"kt\">var<\/span> <span class=\"n\">enums<\/span> <span class=\"p\">=<\/span> <span class=\"k\">new<\/span><span class=\"p\">[]<\/span>\n            <span class=\"p\">{<\/span>\n                <span class=\"k\">new<\/span> <span class=\"p\">{<\/span> <span class=\"n\">Name<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"OrderStatus\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">Values<\/span> <span class=\"p\">=<\/span> <span class=\"k\">new<\/span><span class=\"p\">[]<\/span> <span class=\"p\">{<\/span> <span class=\"s\">\"Pending\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"Processing\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"Shipped\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"Delivered\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"Cancelled\"<\/span> <span class=\"p\">}<\/span> <span class=\"p\">},<\/span>\n                <span class=\"k\">new<\/span> <span class=\"p\">{<\/span> <span class=\"n\">Name<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"UserRole\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">Values<\/span> <span class=\"p\">=<\/span> <span class=\"k\">new<\/span><span class=\"p\">[]<\/span> <span class=\"p\">{<\/span> <span class=\"s\">\"Admin\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"User\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"Guest\"<\/span> <span class=\"p\">}<\/span> <span class=\"p\">}<\/span>\n            <span class=\"p\">};<\/span>\n\n            <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"kt\">var<\/span> <span class=\"n\">enumDef<\/span> <span class=\"k\">in<\/span> <span class=\"n\">enums<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">{<\/span>\n                <span class=\"kt\">var<\/span> <span class=\"n\">source<\/span> <span class=\"p\">=<\/span> <span class=\"nf\">GenerateEnumSource<\/span><span class=\"p\">(<\/span><span class=\"n\">enumDef<\/span><span class=\"p\">.<\/span><span class=\"n\">Name<\/span><span class=\"p\">,<\/span> <span class=\"n\">enumDef<\/span><span class=\"p\">.<\/span><span class=\"n\">Values<\/span><span class=\"p\">);<\/span>\n                <span class=\"n\">context<\/span><span class=\"p\">.<\/span><span class=\"nf\">AddSource<\/span><span class=\"p\">(<\/span><span class=\"s\">$\"<\/span><span class=\"p\">{<\/span><span class=\"n\">enumDef<\/span><span class=\"p\">.<\/span><span class=\"n\">Name<\/span><span class=\"p\">}<\/span><span class=\"s\">.g.cs\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">SourceText<\/span><span class=\"p\">.<\/span><span class=\"nf\">From<\/span><span class=\"p\">(<\/span><span class=\"n\">source<\/span><span class=\"p\">,<\/span> <span class=\"n\">Encoding<\/span><span class=\"p\">.<\/span><span class=\"n\">UTF8<\/span><span class=\"p\">));<\/span>\n                <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"n\">Diagnostics<\/span><span class=\"p\">.<\/span><span class=\"n\">Debug<\/span><span class=\"p\">.<\/span><span class=\"nf\">WriteLine<\/span><span class=\"p\">(<\/span><span class=\"s\">$\"Generated <\/span><span class=\"p\">{<\/span><span class=\"n\">enumDef<\/span><span class=\"p\">.<\/span><span class=\"n\">Name<\/span><span class=\"p\">}<\/span><span class=\"s\">.g.cs\"<\/span><span class=\"p\">);<\/span>\n            <span class=\"p\">}<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"k\">private<\/span> <span class=\"kt\">string<\/span> <span class=\"nf\">GenerateEnumSource<\/span><span class=\"p\">(<\/span><span class=\"kt\">string<\/span> <span class=\"n\">enumName<\/span><span class=\"p\">,<\/span> <span class=\"kt\">string<\/span><span class=\"p\">[]<\/span> <span class=\"n\">values<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"kt\">var<\/span> <span class=\"n\">enumValues<\/span> <span class=\"p\">=<\/span> <span class=\"kt\">string<\/span><span class=\"p\">.<\/span><span class=\"nf\">Join<\/span><span class=\"p\">(<\/span><span class=\"s\">\",\\n    \"<\/span><span class=\"p\">,<\/span> <span class=\"n\">values<\/span><span class=\"p\">);<\/span>\n            <span class=\"k\">return<\/span> <span class=\"s\">$@\"<\/span><span class=\"err\">\n<\/span><span class=\"s\">namespace EnumGeneratorDemoApp.Enums<\/span><span class=\"err\">\n<\/span><span class=\"p\">{{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">enum<\/span> <span class=\"p\">{<\/span><span class=\"n\">enumName<\/span><span class=\"p\">}<\/span>\n    <span class=\"p\">{{<\/span>\n        <span class=\"p\">{<\/span><span class=\"n\">enumValues<\/span><span class=\"p\">}<\/span>\n    <span class=\"p\">}}<\/span>\n<span class=\"p\">}}<\/span><span class=\"err\">\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">;<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"3_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D9%BE%D8%B1%D9%88%DA%98%D9%87_EnumGeneratorDemoApp\"><\/span>\n<p>  3. \u0627\u06cc\u062c\u0627\u062f \u067e\u0631\u0648\u0698\u0647 EnumGeneratorDemoApp<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0647 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc EnumGeneratorDemoApp \u0628\u0631\u0648\u06cc\u062f \u0648 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u06a9\u0646\u0633\u0648\u0644 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>cd ..\/EnumGeneratorDemoApp\ndotnet new console -n EnumGeneratorDemoApp\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0631\u062c\u0639 \u0631\u0627 \u0628\u0647 <strong>EnumGenerator<\/strong> \u067e\u0631\u0648\u0698\u0647 \u062f\u0631 <strong>EnumGeneratorDemoApp.csproj<\/strong> \u0641\u0627\u06cc\u0644:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight xml\"><code><span class=\"nt\"><project> <span class=\"na\">Sdk=<\/span><span class=\"s\">\"Microsoft.NET.Sdk\"<\/span><span class=\"nt\">&gt;<\/span>\n\n  <span class=\"nt\"><propertygroup\/><\/span>\n    <span class=\"nt\"><outputtype\/><\/span>Exe<span class=\"nt\"\/>\n    <span class=\"nt\"><targetframework\/><\/span>net8.0<span class=\"nt\"\/>\n    <span class=\"nt\"><nullable\/><\/span>enable<span class=\"nt\"\/>\n    <span class=\"nt\"><implicitusings\/><\/span>enable<span class=\"nt\"\/>\n  <span class=\"nt\"\/>\n\n  <span class=\"nt\"><itemgroup\/><\/span>\n    <span class=\"nt\"><projectreference> <span class=\"na\">Include=<\/span><span class=\"s\">\"..\\EnumGenerator\\EnumGenerator.csproj\"<\/span> <span class=\"na\">OutputItemType=<\/span><span class=\"s\">\"Analyzer\"<\/span> <span class=\"na\">ReferenceOutputAssembly=<\/span><span class=\"s\">\"false\"<\/span> <span class=\"nt\">\/&gt;<\/span>\n  <span class=\"nt\"\/>\n\n<span class=\"nt\"\/><\/projectreference><\/span><\/project><\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f <strong>Program.cs<\/strong> \u0641\u0627\u06cc\u0644 \u0628\u0627 \u0645\u062d\u062a\u0648\u0627\u06cc \u0632\u06cc\u0631:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"k\">using<\/span> <span class=\"nn\">EnumGeneratorDemoApp.Enums<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">using<\/span> <span class=\"nn\">System<\/span><span class=\"p\">;<\/span>\n\n<span class=\"k\">namespace<\/span> <span class=\"nn\">EnumGeneratorDemoApp<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">class<\/span> <span class=\"nc\">Program<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">static<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">Main<\/span><span class=\"p\">(<\/span><span class=\"kt\">string<\/span><span class=\"p\">[]<\/span> <span class=\"n\">args<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"kt\">var<\/span> <span class=\"n\">order<\/span> <span class=\"p\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Order<\/span>\n            <span class=\"p\">{<\/span>\n                <span class=\"n\">Id<\/span> <span class=\"p\">=<\/span> <span class=\"n\">Guid<\/span><span class=\"p\">.<\/span><span class=\"nf\">NewGuid<\/span><span class=\"p\">(),<\/span>\n                <span class=\"n\">Status<\/span> <span class=\"p\">=<\/span> <span class=\"n\">OrderStatus<\/span><span class=\"p\">.<\/span><span class=\"n\">Pending<\/span>\n            <span class=\"p\">};<\/span>\n\n            <span class=\"kt\">var<\/span> <span class=\"n\">user<\/span> <span class=\"p\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">User<\/span>\n            <span class=\"p\">{<\/span>\n                <span class=\"n\">Id<\/span> <span class=\"p\">=<\/span> <span class=\"n\">Guid<\/span><span class=\"p\">.<\/span><span class=\"nf\">NewGuid<\/span><span class=\"p\">(),<\/span>\n                <span class=\"n\">Role<\/span> <span class=\"p\">=<\/span> <span class=\"n\">UserRole<\/span><span class=\"p\">.<\/span><span class=\"n\">Admin<\/span>\n            <span class=\"p\">};<\/span>\n\n            <span class=\"n\">Console<\/span><span class=\"p\">.<\/span><span class=\"nf\">WriteLine<\/span><span class=\"p\">(<\/span><span class=\"s\">$\"Order ID: <\/span><span class=\"p\">{<\/span><span class=\"n\">order<\/span><span class=\"p\">.<\/span><span class=\"n\">Id<\/span><span class=\"p\">}<\/span><span class=\"s\">, Status: <\/span><span class=\"p\">{<\/span><span class=\"n\">order<\/span><span class=\"p\">.<\/span><span class=\"n\">Status<\/span><span class=\"p\">}<\/span><span class=\"s\">\"<\/span><span class=\"p\">);<\/span>\n            <span class=\"n\">Console<\/span><span class=\"p\">.<\/span><span class=\"nf\">WriteLine<\/span><span class=\"p\">(<\/span><span class=\"s\">$\"User ID: <\/span><span class=\"p\">{<\/span><span class=\"n\">user<\/span><span class=\"p\">.<\/span><span class=\"n\">Id<\/span><span class=\"p\">}<\/span><span class=\"s\">, Role: <\/span><span class=\"p\">{<\/span><span class=\"n\">user<\/span><span class=\"p\">.<\/span><span class=\"n\">Role<\/span><span class=\"p\">}<\/span><span class=\"s\">\"<\/span><span class=\"p\">);<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">Order<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">public<\/span> <span class=\"n\">Guid<\/span> <span class=\"n\">Id<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n        <span class=\"k\">public<\/span> <span class=\"n\">OrderStatus<\/span> <span class=\"n\">Status<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">User<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">public<\/span> <span class=\"n\">Guid<\/span> <span class=\"n\">Id<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n        <span class=\"k\">public<\/span> <span class=\"n\">UserRole<\/span> <span class=\"n\">Role<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"4_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D8%B1%D8%A7%D9%87_%D8%AD%D9%84_%D9%88_%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D8%B1%D8%AF%D9%86_%D9%BE%D8%B1%D9%88%DA%98%D9%87_%D9%87%D8%A7\"><\/span>\n<p>  4. \u0627\u06cc\u062c\u0627\u062f \u0631\u0627\u0647 \u062d\u0644 \u0648 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u067e\u0631\u0648\u0698\u0647 \u0647\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0647 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc EnumGeneratorDemo \u0628\u0631\u06af\u0631\u062f\u06cc\u062f \u0648 \u06cc\u06a9 \u0631\u0627\u0647 \u062d\u0644 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>cd ..\ndotnet new sln -n EnumGeneratorDemo\ndotnet sln add EnumGenerator\/EnumGenerator.csproj\ndotnet sln add EnumGeneratorDemoApp\/EnumGeneratorDemoApp.csproj\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"5_%D8%AA%D8%AF%D9%88%DB%8C%D9%86_%D9%88_%D8%A7%D8%AC%D8%B1%D8%A7\"><\/span>\n<p>  5. \u062a\u062f\u0648\u06cc\u0646 \u0648 \u0627\u062c\u0631\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u0628\u062a\u062f\u0627 \u067e\u0631\u0648\u0698\u0647 EnumGenerator \u0631\u0627 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>cd EnumGenerator\ndotnet build\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u067e\u0631\u0648\u0698\u0647 \u0627\u0635\u0644\u06cc EnumGeneratorDemoApp \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>cd ..\/EnumGeneratorDemoApp\ndotnet build\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u062c\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0627\u0635\u0644\u06cc:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>dotnet run\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"6_%D8%AA%D8%A7%DB%8C%DB%8C%D8%AF_%D9%81%D8%A7%DB%8C%D9%84_%D9%87%D8%A7%DB%8C_%D8%AA%D9%88%D9%84%DB%8C%D8%AF_%D8%B4%D8%AF%D9%87\"><\/span>\n<p>  6. \u062a\u0627\u06cc\u06cc\u062f \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u0633\u062a\u06cc \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc .g.cs \u062f\u0631 \u067e\u0648\u0634\u0647 obj \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647\u200c\u0627\u0646\u062f <strong>EnumGeneratorDemoApp<\/strong> \u067e\u0631\u0648\u0698\u0647:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>cd EnumGeneratorDemoApp\/obj\/Debug\/net8.0\/generated\/EnumGeneratorDemoApp\/\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%AA%DB%8C%D8%AC%D9%87\"><\/span>\n<p>  \u0646\u062a\u06cc\u062c\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0628\u0647 \u0628\u0631\u0631\u0633\u06cc \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0645\u06cc \u067e\u0631\u062f\u0627\u0632\u06cc\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 Source Generators \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0634\u06cc\u0648\u0647 \u0646\u0648\u0634\u062a\u0646 \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u06a9\u062f \u062f\u0631 \u0633\u06cc \u0634\u0627\u0631\u067e \u0631\u0627 \u0645\u062a\u062d\u0648\u0644 \u06a9\u0646\u062f.  \u0628\u0627 \u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc \u062e\u0648\u062f\u060c \u0646\u062d\u0648\u0647 \u0627\u06cc\u062c\u0627\u062f \u0648 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06cc\u06a9 \u0645\u0648\u0644\u062f enum \u0631\u0627 \u062f\u06cc\u062f\u06cc\u0645 \u06a9\u0647 \u0627\u06cc\u062c\u0627\u062f \u0634\u0645\u0627\u0631\u0634\u06af\u0631\u0647\u0627 \u0631\u0627 \u062f\u0631 \u062d\u06cc\u0646 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0646\u0648\u0634\u062a\u0646 \u06a9\u062f\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc \u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u0633\u062a\u06cc \u0631\u0627 \u06a9\u0627\u0647\u0634 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>\u0698\u0646\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0645\u0646\u0628\u0639 \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u06cc \u0627\u0632 \u0645\u0632\u0627\u06cc\u0627 \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u0646\u062f\u060c \u0627\u0632 \u0628\u0647\u0628\u0648\u062f \u0639\u0645\u0644\u06a9\u0631\u062f \u06af\u0631\u0641\u062a\u0647 \u062a\u0627 \u0633\u0647\u0648\u0644\u062a \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0648 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0633\u0627\u0632\u06cc \u06a9\u062f.  \u0628\u0627 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u0631\u062f\u0646 \u06a9\u0627\u0631\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc \u0648 \u062e\u0633\u062a\u0647 \u06a9\u0646\u0646\u062f\u0647\u060c \u0632\u0645\u0627\u0646 \u0628\u06cc\u0634\u062a\u0631\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0628\u062e\u0634 \u0647\u0627\u06cc \u0648\u0627\u0642\u0639\u0627 \u0645\u0647\u0645 \u0648 \u062e\u0644\u0627\u0642\u0627\u0646\u0647 \u062a\u0648\u0633\u0639\u0647 \u0646\u0631\u0645 \u0627\u0641\u0632\u0627\u0631 \u0622\u0632\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u0627\u0646\u0639\u0637\u0627\u0641\u200c\u067e\u0630\u06cc\u0631\u06cc Source Generators \u0628\u0647 \u200b\u200b\u0634\u0645\u0627 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f \u062a\u0627 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0647\u0627 \u0648 \u0634\u06cc\u0648\u0647\u200c\u0647\u0627\u06cc \u062b\u0627\u0628\u062a\u06cc \u0631\u0627 \u062f\u0631 \u06a9\u0644 \u067e\u0627\u06cc\u06af\u0627\u0647 \u06a9\u062f \u062e\u0648\u062f \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f \u0648 \u0645\u0639\u0645\u0627\u0631\u06cc \u062a\u0645\u06cc\u0632\u062a\u0631 \u0648 \u06a9\u0627\u0631\u0622\u0645\u062f\u062a\u0631 \u0631\u0627 \u0627\u0631\u062a\u0642\u0627 \u062f\u0647\u06cc\u062f.  \u062f\u0646\u06cc\u0627\u06cc\u06cc \u0631\u0627 \u062a\u0635\u0648\u0631 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0646\u06cc\u0627\u0632\u06cc \u0646\u06cc\u0633\u062a \u0646\u06af\u0631\u0627\u0646 \u062a\u0648\u0644\u06cc\u062f \u06a9\u062f \u062f\u06cc\u06af \u0628\u062e\u0627\u0631 \u0628\u0627\u0634\u06cc\u062f \u0648 \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u0631\u0648\u06cc \u062a\u0648\u0633\u0639\u0647 \u0631\u0627\u0647 \u062d\u0644 \u0647\u0627\u06cc \u0646\u0648\u0622\u0648\u0631\u0627\u0646\u0647 \u0648 \u0642\u0648\u06cc \u062a\u0645\u0631\u06a9\u0632 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u062a\u06a9\u0645\u06cc\u0644 \u06a9\u0627\u0648\u0634 \u062e\u0648\u062f \u062f\u0631 Source Generators\u060c \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0645 \u0627\u0632 \u0645\u062e\u0632\u0646 amis92\/csharp-source-generators \u062f\u06cc\u062f\u0646 \u06a9\u0646\u06cc\u062f\u060c \u06a9\u0647 \u062d\u0627\u0648\u06cc \u0686\u0646\u062f\u06cc\u0646 \u0646\u0645\u0648\u0646\u0647 \u0648 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u062a\u0648\u0633\u0639\u0647 \u06a9\u0645\u06a9 \u06a9\u0646\u062f.<\/p>\n<p>\u0627\u06af\u0631 \u0647\u0646\u0648\u0632 Source Generators \u0631\u0627 \u0627\u0645\u062a\u062d\u0627\u0646 \u0646\u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f\u060c \u0627\u06a9\u0646\u0648\u0646 \u0632\u0645\u0627\u0646 \u0622\u0646 \u0641\u0631\u0627 \u0631\u0633\u06cc\u062f\u0647 \u0627\u0633\u062a.  \u0622\u0646\u0647\u0627 \u0646\u0647 \u062a\u0646\u0647\u0627 \u0628\u0647\u0631\u0647 \u0648\u0631\u06cc \u0634\u0645\u0627 \u0631\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u0645\u06cc \u062f\u0647\u0646\u062f \u0628\u0644\u06a9\u0647 \u06a9\u06cc\u0641\u06cc\u062a \u06a9\u062f \u0634\u0645\u0627 \u0631\u0627 \u0646\u06cc\u0632 \u0628\u0647\u0628\u0648\u062f \u0645\u06cc \u0628\u062e\u0634\u0646\u062f.  \u0648 \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u06cc\u062f\u06cc\u0645\u060c \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647\u060c \u0628\u0647\u200c\u0648\u06cc\u0698\u0647 \u0628\u0627 \u0642\u062f\u0631\u062a \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u0648 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647\u200c\u0647\u0627\u06cc \u062f\u0627\u062a\u200c\u0646\u062a\u060c \u0633\u0627\u062f\u0647 \u0648 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u06a9\u062f \u0646\u0645\u0648\u0646\u0647 \u06a9\u0627\u0645\u0644 \u0645\u0648\u0631\u062f \u0628\u062d\u062b \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0627\u0632 Alisson Podgurski GitHub \u0645\u0646 \u062f\u06cc\u062f\u0646 \u06a9\u0646\u06cc\u062f.  \u0645\u0646 \u0645\u062b\u0627\u0644 \u0631\u0627 \u0628\u06cc\u0634\u062a\u0631 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u0645 \u062a\u0627 \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u062e\u0648\u062f\u062a\u0627\u0646 \u0622\u0646 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u0648\u0644\u062f\u0647\u0627\u06cc \u0645\u0646\u0628\u0639 \u0631\u0627 \u06a9\u0627\u0648\u0634 \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0628\u06cc\u0646\u06cc\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0634\u0645\u0627 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u0646\u062f.  \u067e\u0627\u06cc\u06af\u0627\u0647 \u06a9\u062f \u0648 \u0639\u0642\u0644 \u0634\u0645\u0627 \u0627\u0632 \u0634\u0645\u0627 \u062a\u0634\u06a9\u0631 \u062e\u0648\u0627\u0647\u062f \u06a9\u0631\u062f!<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summarize this content to 400 words in Persian Lang Source Generators \u06cc\u06a9 \u0648\u06cc\u0698\u06af\u06cc \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0645\u0639\u0631\u0641\u06cc \u0634\u062f\u0647 \u062f\u0631 C# 9 \u0648 .NET 5 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u062f \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u0648 \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u06a9\u062f C# \u062c\u062f\u06cc\u062f \u0631\u0627 \u062f\u0631 \u0637\u0648\u0644 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u06cc\u062f. \u0622\u0646\u0647\u0627 \u0628\u0647 \u0648\u06cc\u0698\u0647 \u0628\u0631\u0627\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631\u0633\u0627\u0632\u06cc \u0648\u0638\u0627\u06cc\u0641 \u062a\u06a9\u0631\u0627\u0631\u06cc \u0648 \u0628\u0647\u0628\u0648\u062f &hellip;<\/p>\n","protected":false},"author":2,"featured_media":70286,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-70285","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/70285","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=70285"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/70285\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/70286"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=70285"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=70285"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=70285"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}