在Unity中运行的外部DLL的行为与在Visual Studio中运行时的行为不同

时间:2015-06-03 19:39:52

标签: c# xml visual-studio-2012 unity3d system.xml

我正在写一些C#来表示节点,边和图。作为该代码库的一部分,我有一些类来编写/从xml读取图形。我在Visual Studio中进行了一项测试,它创建了一个图形,将其写入xml,然后从xml重新构建图形。这似乎工作正常。 接下来,我想要在Unity中可视化图形。我将我的图形代码编译成带有.net 3.5的.dll并将其导入Unity。 Unity识别.dll,并且在尝试运行它时不会抛出任何错误。但是,当我尝试加载与以前相同的xml文件时,xml解析器会中断并无法加载图形。

有谁知道可能导致这种情况的原因是什么?回到Visual Studio,我尝试将.net库换成单独的库,猜测这可能是一个问题,但它仍然可以正常工作。 Visual Studio效果很好,但Unity正在崛起。

我尝试解析的xml文件看起来像......

    <?xml version="1.0" encoding="utf-8"?>
<graph>
    <time time="0">
        <newNodes>
            <node type="Person" id="£*6O▒$5M¥▒(6»S}_-03+" />
            <node type="Person" id="JÇ$T!-%=▒¾4IW┼RR¿¿G%" />
            <node type="Person" id="X2¿+2B#¥V,ß«88!9-D;)" />
        </newNodes>
        <newEdges>
            <edge type="Knows" id="_«C~F/¾0¾€`J]¾F%†9╟▒" from="£*6O▒$5M¥▒(6»S}_-03+" to="JÇ$T!-%=▒¾4IW┼RR¿¿G%" />
            <edge type="Knows" id="Ð}Ø4┴~Ð;┴/$£YHߣH,P(" from="JÇ$T!-%=▒¾4IW┼RR¿¿G%" to="£*6O▒$5M¥▒(6»S}_-03+" />
            <edge type="Knows" id="J;R`߆`VH9*,J†1(5XÇ/" from="£*6O▒$5M¥▒(6»S}_-03+" to="X2¿+2B#¥V,ß«88!9-D;)" />
            <edge type="Knows" id="¾,┴N!S'@\N{?┴3£D;@‡$" from="X2¿+2B#¥V,ß«88!9-D;)" to="£*6O▒$5M¥▒(6»S}_-03+" />
            <edge type="Knows" id="*6)Ð7$Z¿†*RXCY½3I]X!" from="JÇ$T!-%=▒¾4IW┼RR¿¿G%" to="X2¿+2B#¥V,ß«88!9-D;)" />
            <edge type="Knows" id="┼¼~CØ0;N5C[X+OV«Ø!7]" from="X2¿+2B#¥V,ß«88!9-D;)" to="JÇ$T!-%=▒¾4IW┼RR¿¿G%" />
        </newEdges>
        <oldNodes />
        <oldEdges />
    </time>
    <time time="1">
        <newNodes>
            <node type="Person" id="+E%_WØ¿V_J7N-|]75«W!" />
        </newNodes>
        <newEdges>
            <edge type="Knows" id="Ç┼/»U.¾9+YQ8}╟C=#CV*" from="£*6O▒$5M¥▒(6»S}_-03+" to="+E%_WØ¿V_J7N-|]75«W!" />
            <edge type="Knows" id="€'T[┼‡/¿~8=Ç`Ç3]$R\*" from="+E%_WØ¿V_J7N-|]75«W!" to="£*6O▒$5M¥▒(6»S}_-03+" />
        </newEdges>
        <oldNodes />
        <oldEdges />
    </time>
    <time time="2">
        <newNodes>
            <node type="Person" id="]?:ER#349A@.%PXG8V§," />
        </newNodes>
        <newEdges>
            <edge type="Knows" id="Ç~-EY'@26@▒~ØU^I½1_/" from="JÇ$T!-%=▒¾4IW┼RR¿¿G%" to="+E%_WØ¿V_J7N-|]75«W!" />
        </newEdges>
        <oldNodes />
        <oldEdges />
    </time>
    <time time="3">
        <newNodes />
        <newEdges>
            <edge type="Knows" id="§/«;~'2H,}KÐ8»•ÐVMÐ{" from="+E%_WØ¿V_J7N-|]75«W!" to="]?:ER#349A@.%PXG8V§," />
        </newEdges>
        <oldNodes />
        <oldEdges />
    </time>
</graph>

在Unity中,解析器无法读取newNodes下的所有节点 这个小小的代码块应该全部读取它们。在Visual Studio中,它工作得很好,第一次元素中的所有三个newNodes都被解析。在Unity中,只有第一个是。

reader.ReadToFollowing(XmlConstants.NEW_NODES);
if (reader.ReadToDescendant(XmlConstants.NODE))
{
     do
     {
           Node node = XmlHelper.readNode(reader, nodeTypes);
           g.add(node, time);
           Slog.WriteLn("Loaded node " + node.Sguid);

     } while (reader.ReadToNextSibling(XmlConstants.NODE));
}

函数XmlHelper.readNode中的代码只调用reader.MoveToAttribute()和reader.Value

我对这个问题感到非常困惑。任何见解将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

啊哈哈。 从昨天开始我就试图解决这个问题,我想我刚刚找到了答案。

我添加了命令

reader.MoveToElement()

我读完属性后。这解决了它。我猜读者.MoveToAttribute()后来跳了起来,后来又找到了一个属性,那就是抛弃其余的遍历。