XML 使用带有 Grial UI 套件的 Xamarin Forms 解析错误

XML parsing errors with Xamarin Forms with Grial UI Kit

所以我在我的 Xamarin Forms 应用程序中使用 Grial UI 套件。我正在按照 iOS 和 Android 的说明 mentioned here 进行操作。它适用于 iOS。但是,对于 Android,它会在 Colors.tt 文件的第 2 行引发错误。

Colors.tt 文件包含以下代码:

<#@ template language="C#" hostspecific="True" #>
<#@ output extension=".xml" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Drawing" #>
<#@ assembly name="System.Xml" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.Drawing" #>
<#@ import namespace="System.Globalization" #>
<#@ import namespace="System.Text.RegularExpressions" #>
<#@ assembly name="System.Windows" #>
<#@ import namespace="System.Windows" #>
<# 
string path = Host.ResolvePath("../../../PCLFolderName/App.xaml");
XmlDocument doc = new XmlDocument();
doc.Load(path);

Dictionary<string, Color> knownColors = new Dictionary<string, Color> ();
List<string> exports = new List<string> ();

XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("artina", "clr-namespace:UXDivers.Artina.Shared;assembly=UXDivers.Artina.Shared");
nsmgr.AddNamespace ("xamarin", "http://xamarin.com/schemas/2014/forms");

XmlNode resources = doc.DocumentElement.SelectSingleNode("/xamarin:Application/xamarin:Application.Resources/xamarin:ResourceDictionary", nsmgr);

if (resources != null) {
    foreach (XmlNode node in resources.ChildNodes) {
        if (node.NodeType == XmlNodeType.Comment) {
            var comment = node.InnerText.Trim (); 

            Match match = Regex.Match(comment, @"Export\s([A-Za-z0-9\-]+)$", RegexOptions.IgnoreCase);

            if (match.Success)
            {
                exports.Add (match.Groups[1].Value);
            }
        }
        else if (node.Name == "Color") {
            string colorName = null;

            foreach (XmlAttribute attribute in node.Attributes) {
                if (attribute.LocalName == "Key") {
                    colorName = attribute.Value;
                    var colorDefinition = node.InnerText.Trim ();
                    Color color;

                    if (colorDefinition.StartsWith ("#")) {
                        if (colorDefinition.Length == 7) {
                            colorDefinition = "FF" + colorDefinition;
                        }

                        int argb = Int32.Parse (colorDefinition.Replace ("#", ""), NumberStyles.HexNumber);
                        color = Color.FromArgb (argb);
                    } else {
                        color = Color.FromName (colorDefinition);
                        string colorString = string.Format("#FF{0:X2}{1:X2}{2:X2}",
                        color.R, color.G, color.B);

                        color = System.Drawing.ColorTranslator.FromHtml(colorString);
                    }

                    knownColors.Add (colorName, color);
                }
            }
        }
    }
}               
if (exports.Count > 0){
#>
<?xml version="1.0" encoding="utf-8" ?>
<resources>
    <!-- Artina Exported Colors -->
<#
  foreach(var name in exports){ 
     Color color;

     if (knownColors.TryGetValue(name, out color)){
#>
    <color name="<#= name #>">#<#= color.A.ToString("X2") #><#= color.R.ToString("X2") #><#= color.G.ToString("X2") #><#= color.B.ToString("X2") #></color>
<#
     }
  }
#>
</resources>
<#
}
#>

第 2 行抛出错误: <#@ output extension=".xml" #>

错误信息是:

解析错误 XML:格式不正确(无效标记)

有人遇到过这个问题吗?非常感谢任何解决方案或意见。

谢谢。 诺尔

PS:

  1. 在 Mac.
  2. 上使用 VS2015 + Xamarin VS + Windows 10 完成开发
  3. 所有 SDK 已更新。

所以通过将 colors.tt 文件上的构建操作更改为 None.

解决了这个问题