private static TextExpressionCompilerSettings GetCompilerSettings(IDynamicActivity dynamicActivity, string language) { int lastIndexOfDot = dynamicActivity.Name.LastIndexOf('.'); int lengthOfName = dynamicActivity.Name.Length; string activityName = lastIndexOfDot > 0 ? dynamicActivity.Name.Substring(lastIndexOfDot + 1) : dynamicActivity.Name; activityName += "_CompiledExpressionRoot"; string activityNamespace = lastIndexOfDot > 0 ? dynamicActivity.Name.Substring(0, lastIndexOfDot) : null; return(new TextExpressionCompilerSettings() { Activity = (Activity)dynamicActivity, ActivityName = activityName, ActivityNamespace = activityNamespace, RootNamespace = null, GenerateAsPartialClass = false, AlwaysGenerateSource = true, Language = language }); }
private static void Compile(IDynamicActivity dynamicActivity, ActivityXamlServicesSettings settings) { string language = null; if (!RequiresCompilation(dynamicActivity, settings.LocationReferenceEnvironment, out language)) { return; } var aotCompiler = settings.GetCompiler(language); var compiler = new TextExpressionCompiler(GetCompilerSettings(dynamicActivity, language, aotCompiler)); var results = compiler.Compile(); if (results.HasErrors) { var messages = new StringBuilder(); foreach (TextExpressionCompilerError message in results.CompilerMessages) { messages.Append("\r\n"); messages.Append(string.Concat(" ", SR.ActivityXamlServiceLineString, " ", message.SourceLineNumber, ": ")); messages.Append(message.Message); } messages.Append("\r\n"); InvalidOperationException exception = new InvalidOperationException(SR.ActivityXamlServicesCompilationFailed(messages.ToString())); foreach (TextExpressionCompilerError message in results.CompilerMessages) { exception.Data.Add(message, message.Message); } throw FxTrace.Exception.AsError(exception); } Type compiledExpressionRootType = results.ResultType; ICompiledExpressionRoot compiledExpressionRoot = Activator.CreateInstance(compiledExpressionRootType, new object[] { dynamicActivity }) as ICompiledExpressionRoot; CompiledExpressionInvoker.SetCompiledExpressionRootForImplementation(dynamicActivity, compiledExpressionRoot); }