在Unity中运行的外部DLL与在Visual Studio中运行时的行为不同
本文关键字:运行时 Studio 与在 运行 Unity 外部 DLL Visual | 更新日期: 2023-09-27 17:53:00
我正在写一些c#来表示节点、边和图形。作为代码库的一部分,我有一些类可以从xml中写入/读取图形。我在Visual Studio中进行了一个测试,该测试创建了一个图形,将其写入xml,然后从xml重新构建图形。这似乎工作得很好。接下来,我想在Unity中可视化图形。我用。net 3.5将我的图形代码编译成。dll,并将其导入Unity。Unity识别.dll,并且在运行它时不会抛出错误。但是,当我尝试像以前一样加载相同的xml文件时,xml解析器中断并且无法加载图形。
有人知道是什么原因导致的吗?回到Visual Studio,我试着把。net库换成mono库,猜测这可能是一个问题,但它仍然工作得很好。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。值
我被这个问题弄得很累。如有任何见解,我将不胜感激。谢谢!啊哈。我从昨天开始就在想这个问题,我想我找到答案了。
我添加了命令
reader.MoveToElement ()
在我读取属性之后。这就解决了问题。我猜reader.MoveToAttribute()是跳转到一个属性后,这是抛出其余的遍历关闭。