예제 #1
0
        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
            });
        }
예제 #2
0
        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);
        }