private void ReloadScript() { // Reset cached function ResetFunctionValue(); TraceWriter.Info(string.Format(CultureInfo.InvariantCulture, "Script for function '{0}' changed. Reloading.", Metadata.Name)); TraceWriter.Info("Compiling function script."); ICompilation compilation = _compilationService.GetFunctionCompilation(Metadata); ImmutableArray <Diagnostic> compilationResult = compilation.GetDiagnostics(); FunctionSignature signature = compilation.GetEntryPointSignature(_functionEntryPointResolver); compilationResult = ValidateFunctionBindingArguments(signature, compilationResult.ToBuilder()); TraceCompilationDiagnostics(compilationResult); bool compilationSucceeded = !compilationResult.Any(d => d.Severity == DiagnosticSeverity.Error); TraceWriter.Info(string.Format(CultureInfo.InvariantCulture, "Compilation {0}.", compilationSucceeded ? "succeeded" : "failed")); // If the compilation succeeded, AND: // - We haven't cached a function (failed to compile on load), OR // - We're referencing local function types (i.e. POCOs defined in the function) AND Our our function signature has changed // Restart our host. if (compilationSucceeded && (_functionSignature == null || (_functionSignature.HasLocalTypeReference || !_functionSignature.Equals(signature)))) { Host.RestartEvent.Set(); } }
private async Task ReloadScriptAsync() { // Reset cached function _functionLoader.Reset(); TraceOnPrimaryHost(string.Format(CultureInfo.InvariantCulture, "Script for function '{0}' changed. Reloading.", Metadata.Name), TraceLevel.Info); ImmutableArray <Diagnostic> compilationResult = ImmutableArray <Diagnostic> .Empty; FunctionSignature signature = null; try { ICompilation compilation = _compilationService.GetFunctionCompilation(Metadata); compilationResult = compilation.GetDiagnostics(); signature = compilation.GetEntryPointSignature(_functionEntryPointResolver); compilationResult = ValidateFunctionBindingArguments(signature, _triggerInputName, _inputBindings, _outputBindings, compilationResult.ToBuilder()); } catch (CompilationErrorException exc) { compilationResult = AddFunctionDiagnostics(compilationResult.AddRange(exc.Diagnostics)); } TraceCompilationDiagnostics(compilationResult, LogTargets.User); bool compilationSucceeded = !compilationResult.Any(d => d.Severity == DiagnosticSeverity.Error); TraceOnPrimaryHost(string.Format(CultureInfo.InvariantCulture, "Compilation {0}.", compilationSucceeded ? "succeeded" : "failed"), TraceLevel.Info); // If the compilation succeeded, AND: // - We haven't cached a function (failed to compile on load), OR // - We're referencing local function types (i.e. POCOs defined in the function) AND Our our function signature has changed // Restart our host. if (compilationSucceeded && (_functionSignature == null || (_functionSignature.HasLocalTypeReference || !_functionSignature.Equals(signature)))) { await Host.RestartAsync().ConfigureAwait(false); } }