
рд╣рдо рдЖрдкрдХреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдХреГрдкрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдЬреЛ рд╕реА # рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдХрд╕реНрдЯрдо рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдФрд░ рдирдИ рд╕реА # рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рд╕рдВрдХрд▓рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдирдП рдШрдЯрдХ - рд╕реНрд░реЛрдд рдЬрдирд░реЗрдЯрд░ рдХреА рдорджрдж рд╕реЗ рд╣реЛрддрд╛ рд╣реИред
рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд╡реАрдирддрдо .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 # рд╕рдВрдХрд▓рдХ рдХреА рднрд╛рд╖рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред