
рд╣рдо рдЖрдкрдХреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдХреГрдкрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдЬреЛ рд╕реА # рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдХрд╕реНрдЯрдо рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдФрд░ рдирдИ рд╕реА # рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рд╕рдВрдХрд▓рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдирдП рдШрдЯрдХ - рд╕реНрд░реЛрдд рдЬрдирд░реЗрдЯрд░ рдХреА рдорджрдж рд╕реЗ рд╣реЛрддрд╛ рд╣реИред
рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд╡реАрдирддрдо .NET 5 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдФрд░ Visual Studio рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рдиреЛрдЯ: рд╕реЛрд░реНрд╕ рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕реЗ .NET 5 рдХреЗ рдЕрдЧрд▓реЗ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛рдПрдЧрд╛ред
рдПрдХ рд╕реНрд░реЛрдд рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХреНрдпрд╛ рд╣реИ?
рдПрдХ рд╕реНрд░реЛрдд рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рддрдм рдмрд╛рдХреА рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред
рдпрд╣рд╛рдВ рджреЛ рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ:
- рдПрдХ рд╕рдВрдХрд▓рди рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдЬреЛ рд╕рднреА рд╕рдВрдХрд▓рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдФрд░ рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдзреБрдирд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИред
 - C# , . , .
 
. , , C# . Roslyn, , C#.
:

.NET Standard 2.0, , .NET Standard.
, .
, .
тАФ , , , .
: , IL (IL weaving) MSBuild. .
тАФ .NET. . .
, ASP.NET Core - , , razor . , : - , , , , . , .
тАФ . .
, . MSBuild C# ( CSC) . , . MSBuild, , .
, тАФ "-" (тАЬstringly-typedтАЭ) API. , , ASP.NET Core razor. . , , .
API . -, .
Ahead-of-Time (AOT)
linker-based AOT-. , System.Text.Json, System.Text.RegularExpressions; ASP.NET Core WPF, / .
NuGet . .NET, "" ( тАЬlinkabilityтАЭ) AOT . OSS , .NET.
Hello World-
, .
, тАЬHello WorldтАЭ , . :
public class SomeClassInMyCode
{
    public void SomeMethodIHave()
    {
        HelloWorldGenerated.HelloWorld.SayHello(); 
        
    }
}
, :
1. .NET.
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <LangVersion>preview</LangVersion>
  </PropertyGroup>
  <PropertyGroup>
    <RestoreAdditionalProjectSources>https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json ;$(RestoreAdditionalProjectSources)</RestoreAdditionalProjectSources>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.6.0-3.20207.2" PrivateAssets="all" />
    <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.0.0-beta2.final" PrivateAssets="all" />
  </ItemGroup>
</Project>
2. C#, .
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Text;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
namespace MyGenerator
{
    [Generator]
    public class MySourceGenerator : ISourceGenerator
    {
        public void Execute(SourceGeneratorContext context)
        {
            
        }
        public void Initialize(InitializationContext context)
        {
             
        }
    }
}
Microsoft.CodeAnalysis.Generator Microsoft.CodeAnalysis.ISourceGenerator.
3. .
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Text;
namespace SourceGeneratorSamples
{
    [Generator]
    public class HelloWorldGenerator : ISourceGenerator
    {
        public void Execute(SourceGeneratorContext context)
        {
            
            var sourceBuilder = new StringBuilder(@"
using System;
namespace HelloWorldGenerated
{
    public static class HelloWorld
    {
        public static void SayHello() 
        {
            Console.WriteLine(""   !"");
            Console.WriteLine(""       "");
");
           
            var syntaxTrees = context.Compilation.SyntaxTrees;
            
            foreach (SyntaxTree tree in syntaxTrees)
            {
                sourceBuilder.AppendLine($@"Console.WriteLine(@"" - {tree.FilePath}"");");
            }
            
            sourceBuilder.Append(@"
        }
    }
}");
            
            context.AddSource("helloWorldGenerator", SourceText.From(sourceBuilder.ToString(), Encoding.UTF8));
        }
        public void Initialize(InitializationContext context)
        {
              
        }
    }
}
4. LangVersion .
<PropertyGroup>
  <LangVersion>preview</LangVersion>
</PropertyGroup>
<ItemGroup>
    <ProjectReference Include="path-to-sourcegenerator-project.csproj" 
                      OutputItemType="Analyzer"
                      ReferenceOutputAssembly="false" />
</ItemGroup>
Roslyn, .
Visual Studio , . , :
public class SomeClassInMyCode
{
    public void SomeMethodIHave()
    {
        HelloWorldGenerated.HelloWorld.SayHello(); 
        
    }
}
: Visual Studio, IntelliSense
:
- , , INotifyPropertyChanged,
 - , SourceGeneratorContext,
 - JSON- . .
 
Source Generators Cookbook.
GitHub.
, тАФ , IntelliSense , Visual Studio.
. тАФ . API . C# 9, API , .
C# : ! .NET , C# тАУ . , - .
:
, .
Visual Studio , тАЬ 1.0тАЭ. , . .NET 5 . , API, - OSS.
. , . .
FAQ
, . .
тАФ , , , . , . , , . , - , .
F#?
F#. . , F# , . тАФ , C#, , C# .
?
. тАФ . тАЬтАЭ, . .
?
, . , , . C#, . -.
/ ?
. , / . , C#.
?
C# 9. , .
TFM ?
. .NET Standard 2.0 TFM . .NET Standard 2.0.
Visual Basic F#?
#. , . VB . F# тАФ .
?
, . VB F# , , . . . , , .
Intellisense ? Visual Studio , ?
Visual Studio. . Visual Studio .
Visual Studio?
Visual Studio.
?
NuGet, , . .
Microsoft ?
. . , Microsoft .
LangVersion ?
рдпрджреНрдпрдкрд┐ рд╕реНрд░реЛрдд рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ C # рднрд╛рд╖рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЗрдВ рд╣реИрдВред рдХреЗрд╡рд▓ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд╕реЗрдЯрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдордиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдореМрдЬреВрджрд╛ рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛, рдЬреЛ рдЖрдкрдХреЛ C # рд╕рдВрдХрд▓рдХ рдХреА рднрд╛рд╖рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред