рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдЕрдВрджрд░ C # рдФрд░ Blazor рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЪрд▓рд╛рдирд╛

рдкрд░рд┐рдЪрдп



рдпрджрд┐ рдЖрдк рдПрдХ рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░ рд╣реИрдВ рдФрд░ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬреЗрдПрд╕ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдЕрдВрджрд░ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд░рд╛рдп рд╣реИ рдХрд┐ рдЬреЗрдПрд╕ рдЬрдЯрд┐рд▓ рдЧрдгрдирд╛ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрджреНрдпрдкрд┐ рд╣рд╛рд▓ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдЬреЗрдПрд╕ рдиреЗ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЪреМрдбрд╝рд╛рдИ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдЫрд▓рд╛рдВрдЧ рд▓рдЧрд╛рдИ рд╣реИ, рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдЕрдВрджрд░ рд╕рд┐рд╕реНрдЯрдо рднрд╛рд╖рд╛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдкрдирд╛ рджреЗрдЦрддреЗ рд╣реИрдВред рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, WebAssembly рдХреЗ рдХрд╛рд░рдг рдЦреЗрд▓ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред


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


рдмреНрд▓реЗрдЬрд╝рд░ рдореЗрдВ C # рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛


рдРрд╕реА рдЬрдЯрд┐рд▓ рднрд╛рд╖рд╛ рдХреЛ C # рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдЬрдЯрд┐рд▓ рдФрд░ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдп рд╣реИред #? - рдпрд╣ рддрдХрдиреАрдХ (рдпрд╛ рдмрд▓реНрдХрд┐, рдХреЛрд░) рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рдХрд░ рдЪреБрдХрд╛ рдерд╛ред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдмреНрд▓реЗрдЬрд╝рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВред



рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ Nuget рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - C # рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдХреЗрдЬред


 Install-Package Microsoft.CodeAnalysis.CSharp 

рдкреНрд░рд╛рд░рдВрдн рдкреГрд╖реНрда рддреИрдпрд╛рд░ рдХрд░реЗрдВред


 @page "/" @inject CompileService service <h1>Compile and Run C# in Browser</h1> <div> <div class="form-group"> <label for="exampleFormControlTextarea1">C# Code</label> <textarea class="form-control" id="exampleFormControlTextarea1" rows="10" bind="@CsCode"></textarea> </div> <button type="button" class="btn btn-primary" onclick="@Run">Run</button> <div class="card"> <div class="card-body"> <pre>@ResultText</pre> </div> </div> <div class="card"> <div class="card-body"> <pre>@CompileText</pre> </div> </div> </div> @functions { string CsCode { get; set; } string ResultText { get; set; } string CompileText { get; set; } public async Task Run() { ResultText = await service.CompileAndRun(CsCode); CompileText = string.Join("\r\n", service.CompileLog); this.StateHasChanged(); } } 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рд╕рд╛рд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкреЗрдбрд╝ рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ рд╣рдо рдмреНрд▓реЗрдЬрд╝рд░ рдШрдЯрдХреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВрдЧреЗ - рд╣рдореЗрдВ LanguageVersion.Latest рдХреЗ рдирд╡реАрдирддрдо ( LanguageVersion.Latest ) рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рд░реЛрдЬрд╝рд▓рд┐рди рдХреЗ рд▓рд┐рдП C # рдХреА рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ:


 SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(code, new CSharpParseOptions(LanguageVersion.Latest)); 

рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдЖрдк рдкрд╛рд░реНрд╕рд░ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдХреЛ рдкрдврд╝рдХрд░ рд╕рдХрд▓ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред


  foreach (var diagnostic in syntaxTree.GetDiagnostics()) { CompileLog.Add(diagnostic.ToString()); } 

рдЕрдЧрд▓рд╛, рд╣рдо Assembly рдХреЛ рдмрд╛рдЗрдирд░реА рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред


 CSharpCompilation compilation = CSharpCompilation.Create("CompileBlazorInBlazor.Demo", new[] {syntaxTree}, references, new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); using (MemoryStream stream = new MemoryStream()) { EmitResult result = compilation.Emit(stream); } 

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдкрдХреЛ references рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЬреБрдбрд╝реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╕реВрдЪреАред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ Assembly.Location рд╕рд╛рде рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реВрдБред рдХреНрдпреЛрдВрдХрд┐ рдкрде, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдПрдХ рд╡реИрдЪрд╛рд░рд┐рдХ рдЕрд╡рд╕рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ Http рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╕рдВрдХрд▓рди рдХреЗ рдкрд╣рд▓реЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣реА рдРрд╕рд╛ рдХрд░реЗрдВрдЧреЗред


 foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { references.Add( MetadataReference.CreateFromStream( await this._http.GetStreamAsync("/_framework/_bin/" + assembly.Location))); } 

EmitResult рдЖрдк рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рдВрдХрд▓рди рд╕рдлрд▓ рд░рд╣рд╛ рдерд╛, рд╕рд╛рде рд╣реА рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрддреНрд░реБрдЯрд┐рдпрд╛рдВ рднреА EmitResult ред
рдЕрдм рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди AppDomain рдореЗрдВ Assembly рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдЕрдВрджрд░ рдХрдИ AppDomain рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ Assembly рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд▓реЛрдб рдФрд░ рдЕрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред


 Assembly assemby = AppDomain.CurrentDomain.Load(stream.ToArray()); var type = assemby.GetExportedTypes().FirstOrDefault(); var methodInfo = type.GetMethod("Run"); var instance = Activator.CreateInstance(type); return (string) methodInfo.Invoke(instance, new object[] {"my UserName", 12}); 


рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдордиреЗ C # рдХреЛрдб рдХреЛ рд╕реАрдзреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ред рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХрдИ рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдЕрдиреНрдп .NET рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдорд╣рд╛рди рдирд╣реАрдВ рд╣реИ? рдЕрдм рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред


рдХрд┐рд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ Blazor рдШрдЯрдХ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВред


рдмреНрд▓реЗрдЬрд╝рд░ рдШрдЯрдХ Razor рд╕рдВрд╢реЛрдзрд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдмреНрд▓реЗрдЬрд╝рд░ рдШрдЯрдХ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд░реЗрдЬрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдмреНрд▓реЗрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ nuget рд╕реЗ Microsoft.AspNetCore.Blazor.Build рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕реЗ рд╣рдорд╛рд░реЗ Blazor рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рддрдм рд▓рд┐рдВрдХрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ 3 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛрдбрд╝реЗрдВред


 microsoft.aspnetcore.blazor.build\0.7.0\tools\Microsoft.AspNetCore.Blazor.Razor.Extensions.dll microsoft.aspnetcore.blazor.build\0.7.0\tools\Microsoft.AspNetCore.Razor.Language.dll microsoft.aspnetcore.blazor.build\0.7.0\tools\Microsoft.CodeAnalysis.Razor.dll 

рдЖрдЗрдП Razor рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд░реНрдиреЗрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдмреНрд▓реЗрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд░реНрдиреЗрд▓ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рд░реЗрдЬрд░ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред


 var engine = RazorProjectEngine.Create(BlazorExtensionInitializer.DefaultConfiguration, fileSystem, b => { BlazorExtensionInitializer.Register(b); }); 

рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо fileSystem - рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдПрдХ рдЕрдореВрд░реНрдд рд╣реИред рд╣рдордиреЗ рдПрдХ рдЦрд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдк _ViewImports.cshtml рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЬрдЯрд┐рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдм рд╣рдо C # рдХреЛрдб рдХреЗ Blazor рдШрдЯрдХ рд╕реЗ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗред


  var file = new MemoryRazorProjectItem(code); var doc = engine.Process(file).GetCSharpDocument(); var csCode = doc.GeneratedCode; 

рдЖрдк рдмреНрд▓реЗрдЬрд╝рд░ рдШрдЯрдХ рд╕реЗ рд╕реА # рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ doc рд╕реЗ рдирд┐рджрд╛рди рд╕рдВрджреЗрд╢ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм рд╣рдореЗрдВ C # рдШрдЯрдХ рдХрд╛ рдХреЛрдб рдорд┐рд▓рд╛ред рдЖрдкрдХреЛ SyntaxTree рдХреЛ SyntaxTree рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдлрд┐рд░ рдЕрд╕реЗрдВрдмрд▓реА рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ, рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди AppDomain рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдШрдЯрдХ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдвреВрдВрдвреЗрдВред рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рдиред


рдпрд╣ рдЗрд╕ рдШрдЯрдХ рдХреЛ рд╡рд░реНрддрдорд╛рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ RenderFragment ред


 @inject CompileService service <div class="card"> <div class="card-body"> @Result </div> </div> @functions { RenderFragment Result = null; string Code { get; set; } public async Task Run() { var type = await service.CompileBlazor(Code); if (type != null) { Result = builder => { builder.OpenComponent(0, type); builder.CloseComponent(); }; } else { Result = null; } } } 


рдирд┐рд╖реНрдХрд░реНрд╖


рд╣рдордиреЗ рдмреНрд▓реИрдЬрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдареАрдХ рднреАрддрд░ рдЧрддрд┐рд╢реАрд▓ рд╕реА # рдХреЛрдб рдХрд╛ рдПрдХ рдкреВрд░реНрдг рд╕рдВрдХрд▓рди рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред


рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдРрд╕реЗ "рдиреБрдХрд╕рд╛рди" рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:


  • bind рдмрд┐рдбрд╛рдпрд░реЗрдХреНрд╢рдирд▓ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд bind рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
  • async, await рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП async, await , рдЗрд╕реА рддрд░рд╣ рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдкреБрд╕реНрддрдХрд╛рд▓рдп
  • рдмреНрд▓реЗрдЬрд╝рд░ рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдХреЛрдВ рдХреЗ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рджреЛ-рдЪрд░рдг рд╕рдВрдХрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЗрди рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкрд╣рд▓реЗ рд╣реА рд╣реЛ рдЪреБрдХрд╛ рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред


GIT


рдбреЗрдореЛ

Source: https://habr.com/ru/post/hi433818/


All Articles