2015-06-03 1 views
0

Я пишу несколько C# для представления узлов, ребер и графиков. Как часть этой библиотеки кода, у меня есть несколько классов для записи/чтения графиков в/из xml. У меня есть тест в Visual Studio, который создает граф, записывает его в xml и затем восстанавливает график обратно из xml. Кажется, это работает нормально. Далее я хотел визуализировать графики внутри Unity. Я скомпилировал свой код графа в .dll с .net 3.5 и импортировал его в Unity. Unity распознает .dll и не вызывает ошибок, пытающихся запустить его. Однако, когда я пытаюсь загрузить тот же файл xml, как и раньше, анализатор xml разбивается и не может загрузить график.Внешняя DLL, запущенная в Unity, ведет себя по-другому, а затем при запуске в Visual Studio

Кто-нибудь знает, что может быть причиной этого? Вернувшись в Visual Studio, я попытался заменить библиотеки .net на моно библиотеки, угадав, что это может быть проблемой, но все равно работала нормально. Визуальная студия отлично работает, но 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#[email protected]%PXG8V§," /> 
     </newNodes> 
     <newEdges> 
      <edge type="Knows" id="Ç~-EY'@[email protected]▒~Ø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#[email protected]%PXG8V§," /> 
     </newEdges> 
     <oldNodes /> 
     <oldEdges /> 
    </time> 
</graph> 

В Unity, синтаксический анализатор не в состоянии прочитать все узлы под newNodes Этот маленький патрон код должен прочитать все они внутри. В Visual Studio он отлично работает, и все три newNodes в первом элементе анализируются. В единстве только первый.

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

Я довольно измотанным этой проблемой. Любое понимание было бы весьма благодарным. Благодаря!

+0

1) Как открыть файл для чтения? 2) Как вы пишете эти атрибуты id? – dbc

+0

Я открываю файл только с помощью XmlReader. XmlReader reader = новый XmlReader ("test.xml"); , и я не уверен, почему, как я написал atts, имеет значение, но я также использовал XmlWriter. writer.writeAttributeString ("id", "blah blah, id"); – cdhanna

+0

Я думал, что это может быть проблема с кодировкой (эти строки 'id' выглядят довольно не-ASCII), но я вижу, что вы [нашли проблему] (http://stackoverflow.com/questions/30629175/external-dll-running- in-unity-behays-differently-then-when-run-in-visual-studio/30629594 # 30629594), так как я написал свой комментарий. – dbc

ответ

0

Ah ha. Я пытался понять это со вчерашнего дня, и я думаю, что нашел ответ.

Я добавил команду

reader.MoveToElement()

после того как я прочитал атрибуты. Это решило. Я думаю, читатель. MoveToAttribute() прыгал вперед и позже попадал в атрибут, и это отбрасывало оставшуюся часть обхода.

Смежные вопросы