/// <summary> /// Validates well-formedness of the Xaml /// </summary> /// <exception cref="System.IO.FileNotFoundException">If the <code>inputFile</code> was not found</exception> private void ValidateXaml() { XmlReader xmlReader = null; XamlXmlReader xamlReader = null; try { log.Debug("Validating XAML."); xmlReader = XmlReader.Create(inputFile); xamlReader = new XamlXmlReader(xmlReader); ActivityBuilder activity = XamlServices.Load(ActivityXamlServices.CreateBuilderReader(xamlReader)) as ActivityBuilder; log.Info("XAML successfully validated."); } catch (XamlException) { // Only notify user log.Warn("XAML could not be validated. This may also be caused by Custom Activities or WorkflowServices."); } finally { // Cleanup if (xmlReader != null) { xmlReader.Close(); } if (xamlReader != null) { xamlReader.Close(); } } }
/// <summary> /// Dispose object. /// </summary> public void Dispose() { if (_xamlReader != null) { _xamlReader.Close(); _xamlReader = null; } }
public ActivityBuilder LoadActivityBuilder(string fileName) { ActivityBuilder builder; using (var xamlReader = new XamlXmlReader(fileName)) { var builderReader = ActivityXamlServices.CreateBuilderReader(xamlReader); builder = (ActivityBuilder)XamlServices.Load(builderReader); xamlReader.Close(); } return(builder); }
private bool ParseInput() { XamlXmlReader reader = null; try { try { reader = new XamlXmlReader(InputFileName.ItemSpec, new XamlXmlReaderSettings { ProvideLineInfo = true }); } catch (FileNotFoundException ex) { LogError(1001, ex.Message); return(false); } bool classNameExpected = false, classModifierExpected = false; bool lambdaBodyExpected = false, importedNamespacesExpected = false; int nestingLevel = 0, lambdaNestingLevel = -1; while (reader.Read()) { switch (reader.NodeType) { case XamlNodeType.GetObject: ++nestingLevel; break; case XamlNodeType.StartObject: ++nestingLevel; if (nestingLevel == 1) { classNameLineNumber = reader.LineNumber; } if ((reader.Type.Name == "Lambda" || reader.Type.Name == "LambdaExtension") && IsLambdaNamespace(reader.Type.PreferredXamlNamespace)) { lambdaNestingLevel = nestingLevel; } break; case XamlNodeType.EndObject: --nestingLevel; if (nestingLevel < lambdaNestingLevel) { lambdaNestingLevel = -1; } break; case XamlNodeType.StartMember: if (nestingLevel == 1) { if (reader.Member.PreferredXamlNamespace == XamlLanguage.Xaml2006Namespace) { switch (reader.Member.Name) { case "Class": { classNameExpected = true; } break; case "ClassModifier": { classModifierExpected = true; } break; } } else if (reader.Member.DeclaringType != null && IsLambdaNamespace(reader.Member.DeclaringType.PreferredXamlNamespace)) { if (reader.Member.Name == "ImportedNamespaces" && reader.Member.DeclaringType.Name == "LambdaProperties") { importedNamespacesExpected = true; } } } else if (nestingLevel == lambdaNestingLevel) { if (reader.Member == XamlLanguage.UnknownContent || reader.Member == XamlLanguage.PositionalParameters || reader.Member.Name == "Lambda") { lambdaBodyExpected = true; } } break; case XamlNodeType.EndMember: classNameExpected = lambdaBodyExpected = importedNamespacesExpected = false; break; case XamlNodeType.Value: if (classNameExpected) { classNameExpected = false; className = (string)reader.Value; classNameLineNumber = reader.LineNumber; } else if (classModifierExpected) { classModifierExpected = false; classModifier = (string)reader.Value; classModifierLineNumber = reader.LineNumber; } else if (importedNamespacesExpected) { importedNamespaces.Clear(); importedNamespaces.AddRange(((string)reader.Value).Split(" \f\n\r\t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)); importedNamespacesLineNumber = reader.LineNumber; } else if (lambdaBodyExpected) { lambdas.Add(new LambdaInfo { Code = (string)reader.Value, LineNumber = reader.LineNumber }); } break; } } } catch (IOException ex) { LogError(1002, ex.Message); return(false); } catch (XmlException ex) { LogError(1003, ex.Message); return(false); } catch (XamlException ex) { LogError(1004, ex.Message); return(false); } finally { if (reader != null) { reader.Close(); } } return(true); }