private async Task CompileAsync() { this.Loading = true; this.LoaderText = "Processing"; await Task.Delay(10); // Ensure rendering has time to be called CompileToAssemblyResult compilationResult = null; CodeFile mainComponent = null; string originalMainComponentContent = null; try { this.UpdateActiveCodeFileContent(); // Add the necessary main component code prefix and store the original content so we can revert right after compilation. if (this.CodeFiles.TryGetValue(CoreConstants.MainComponentFilePath, out mainComponent)) { originalMainComponentContent = mainComponent.Content; mainComponent.Content = MainComponentCodePrefix + originalMainComponentContent.Replace(MainComponentCodePrefix, ""); } compilationResult = await this.CompilationService.CompileToAssemblyAsync( this.CodeFiles.Values, this.UpdateLoaderTextAsync); this.Diagnostics = compilationResult.Diagnostics.OrderByDescending(x => x.Severity).ThenBy(x => x.Code).ToList(); this.AreDiagnosticsShown = true; } catch (Exception e) { Console.WriteLine(e.Message); Snackbar.Add("Error while compiling the code.", Severity.Error); } finally { if (mainComponent != null) { mainComponent.Content = originalMainComponentContent; } this.Loading = false; } if (compilationResult?.AssemblyBytes?.Length > 0) { this.UnmarshalledJsRuntime.InvokeUnmarshalled <byte[], object>( "App.Repl.updateUserAssemblyInCacheStorage", compilationResult.AssemblyBytes); // TODO: Add error page in iframe this.JsRuntime.InvokeVoid("App.reloadIFrame", "user-page-window", MainUserPagePath); } }
protected IComponent CompileToComponent(CompileToAssemblyResult assemblyResult, string fullTypeName) { var componentType = assemblyResult.Assembly.GetType(fullTypeName); if (componentType == null) { throw new XunitException( $"Failed to find component type '{fullTypeName}'. Found types:" + Environment.NewLine + string.Join(Environment.NewLine, assemblyResult.Assembly.ExportedTypes.Select(t => t.FullName))); } return((IComponent)Activator.CreateInstance(componentType)); }
public async Task CompileAsync() { this.Loading = true; this.LoaderText = "Processing"; await Task.Delay(10); // Ensure rendering has time to be called CompileToAssemblyResult result = null; try { var code = await this.CodeEditorComponent.GetCodeAsync(); result = await this.CompilationService.CompileToAssembly( "UserPage.razor", this.UserComponentCodePrefix + code, this.Preset, this.UpdateLoaderTextAsync); this.Diagnostics = result.Diagnostics.OrderByDescending(x => x.Severity).ThenBy(x => x.Code).ToList(); this.AreDiagnosticsShown = true; } catch (Exception) { this.PageNotificationsComponent.AddNotification(NotificationType.Error, content: "Error while compiling the code."); } finally { this.Loading = false; } if (result?.AssemblyBytes?.Length > 0) { await this.JsRuntime.InvokeVoidAsync("App.Repl.updateUserAssemblyInCacheStorage", result.AssemblyBytes); // TODO: Add error page in iframe await this.JsRuntime.InvokeVoidAsync("App.reloadIFrame", "user-page-window"); } }