2016-07-24 22 views
0

Ich entwerfe eine Anwendung, die auf Microsoft HoloLens mit Unity für die Benutzerinteraktion ausgeführt wird. Die Anwendung verbindet sich mit einem asmx-Webservice, um Daten abzurufen.Einheit zu Visual Studio: Mehrere Assemblys mit identischer Identität wurden importiert

Ich habe ein C# -Testprogramm, um die Verbindung und Datenabfrage vom Webservice zu testen.

Ich folgte dann dieses Tutorial eine DLL zu generieren, basierend auf den Webservice Wsdl (https://www.youtube.com/watch?v=AifcMzEbKnA)

Wenn verwenden Sie das folgende Skript, um die DLL zu generieren:

@echo off 
if exist "Service.xml" (
del MyOwnWS.wsdl 
echo Rename 
rename Service.xml MyOwnWS.wsdl 
echo. 
) 
echo WSDL 
call wsdl MyOwnWS.wsdl -o:MyOwnWS.cs 
echo. 
echo DMCS 
call dmcs /target:library MyOwnWS.cs -r:System.Web.Services,System.Data 
echo. 
echo Done 

Ich habe system.Data weil mein WebService Gibt DataSet-Daten von einer Datenbank zurück.

Ich habe diese DLL im Assets-Ordner des Unity-Projekts gelöscht. Ich musste auch System.Data.dll, System.dll und System.Web.Services.dll darin (nahm sie von C: \ Programme \ Unity Hololens 5.4.0b16-HTP \ Editor \ Data \ Mono \) lib \ mono \ unity-Ordner)

Wenn ich den Unity-Editor verwende, stellt meine Anwendung eine Verbindung zum Webservice her und ruft die Daten ohne Probleme ab.

Nächster Schritt, als ich dieses Tutorial folgte eine HoloLens Anwendung von Unity (http://hololenshelpwebsite.com/Blog/EntryId/1006/HoloLens-Hello-World)

Während es Arbeit für ihre eigene Hallo Welt zu machen, als ich versuchte, mein eigenes Projekt von der Einheit zu bauen ich die folgende Fehlermeldung:

error CS1703: Multiple assemblies with equivalent identity have been imported: 'C:\Users\UserA\.nuget\packages\Microsoft.NETCore.Portable.Compatibility\1.0.0\ref\netcore50\System.dll' and 'J:\Work\MyTestUnity\Assets\System.dll'. Remove one of the duplicate references.Copyright (C) Microsoft Corporation. All rights reserved.Microsoft (R) Visual C# Compiler version 1.3.1.60616

So habe ich eine ProjectFileHook.cs Datei unter Editor mit folgendem Inhalt:

using System; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Xml.Linq; 
using UnityEditor; 
using SyntaxTree.VisualStudio.Unity.Bridge; 
using UnityEngine; 

// http://forum.unity3d.com/threads/missing-c-references-to-system-data.11361/ 
// https://visualstudiogallery.msdn.microsoft.com/8d26236e-4a64-4d64-8486-7df95156aba9 

[InitializeOnLoad] 
public class ProjectFileHook 
{ 
    // necessary for XLinq to save the xml project file in utf8 
    class Utf8StringWriter : StringWriter 
    { 
     public override Encoding Encoding 
     { 
      get { return Encoding.UTF8; } 
     } 
    } 

    static void ProcessNodesWithIncludeAttribute(XDocument document, string localName, string includeValue, Action<XElement> action) 
    { 
     var nodes = document 
      .Descendants() 
      .Where(p => p.Name.LocalName == localName); 

     foreach (var node in nodes) 
     { 
      var xa = node.Attribute("Include"); 
      if (xa != null && !string.IsNullOrEmpty(xa.Value) && string.Equals(xa.Value, includeValue)) 
      { 
       action(node); 
      } 
     }   
    } 

    // Remove System.Data from project (not from file system so Unity can compile properly) 
    static void RemoveFileFromProject(XDocument document, string fileName) 
    { 
     ProcessNodesWithIncludeAttribute(document, "None", fileName, element => element.Remove());   
    } 

    // Adjust references, by using the default framework assembly instead of local file (remove the HintPath) 
    static void RemoveHintPathFromReference(XDocument document, string assemblyName) 
    { 
     ProcessNodesWithIncludeAttribute(document, "Reference", assemblyName, element => element.Nodes().Remove());   
    } 

    static ProjectFileHook() 
    { 
     ProjectFilesGenerator.ProjectFileGeneration += (string name, string content) => 
     { 
      var document = XDocument.Parse(content); 

      RemoveFileFromProject(document, @"Assets\System.Data.dll"); 
      RemoveHintPathFromReference(document, "System.Data"); 

      RemoveFileFromProject(document, @"Assets\System.Web.Services.dll"); 
      RemoveHintPathFromReference(document, "System.Web.Services"); 

      RemoveFileFromProject(document, @"Assets\System.dll"); 
      RemoveHintPathFromReference(document, "System"); 

      var str = new Utf8StringWriter(); 
      document.Save(str); 

      return str.ToString(); 
     }; 
    } 
} 

Aber es sieht aus wie dieses doe s nichts.

Ich bin darüber, wie das im Moment zu beheben ist, und ich brauche wirklich Experten Hilfe, um es herauszufinden.

Antwort

0

So ... Es sieht so aus, als könnten wir den WSDL-Webservice nicht mehr so ​​verwenden. Microsoft hat die Unterstützung dafür in einem Update vor so langer Zeit fallen gelassen. Ich sah mehrere Artikel darüber, aber ich habe vergessen, ein Lesezeichen zu halten. Wenn Sie also nachschlagen wollen, müssen Sie die WUP-Dokumentation durchgehen.

Stattdessen verwendeten wir UnityWebRequest und Coroutines, um die Webservice-Kommunikation zu behandeln.

Wir mussten auch den Webservice aktualisieren, um Get/Post-Anrufe zu ermöglichen.