2017-04-26 2 views
0

Salut, je suis récemment tombé sur vitruvius et je voulais implémenter leur plugin sur un projet wpf pour travailler avec kinect gesture mais je n'ai pas pu le faire avec leurs tutoriels comme montré ci-dessous.Vitruvius Gesture ne fonctionne pas, System.Windows.Markup.XamlParseException

https://vitruviuskinect.com/blog/

avait suivi chaque étape et téléchargé leur exemple de code de travail, mais serait son message d'erreur ci-dessous.

Click here to see the error message Image on Visual Studio

Le message d'erreur complet est indiqué ci-dessous.

Code de gravité Description du projet État Suppression de la ligne de fichier Avertissement Il y avait un décalage entre l'architecture du processeur de le projet en cours de construction « MSIL » et l'architecture du processeur de la référence « LightBuzz.Vitruvius, Version = 1.0. 0,0, Culture = neutre, processorArchitecture = AMD64 "," AMD64 ". Cette non-concordance peut entraîner des défaillances d'exécution. Veuillez envisager de modifier l'architecture de processeur ciblée de votre projet via le gestionnaire de configuration afin d'aligner les architectures de processeur entre votre projet et vos références, ou d'utiliser une dépendance sur les références avec une architecture de processeur correspondant à l'architecture de processeur cible de votre projet . test2

Le code écrit dans le fichier MainWindow.xaml.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 
using Microsoft.Kinect; 
using LightBuzz.Vitruvius; 


namespace test2 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     KinectSensor _sensor; 
     MultiSourceFrameReader _reader; 
     GestureController _gestureController; 


     public MainWindow() 
     { 
      InitializeComponent(); 

      _sensor = KinectSensor.GetDefault(); 

      if (_sensor != null) 
      { 
       _sensor.Open(); 

       _reader = _sensor.OpenMultiSourceFrameReader(FrameSourceTypes.Body); 
       _reader.MultiSourceFrameArrived += Reader_MultiSourceFrameArrived; 

       _gestureController = new GestureController(); 
       _gestureController.GestureRecognized += GestureController_GestureRecognized; 
      } 


     } 



     void Reader_MultiSourceFrameArrived(object sender, MultiSourceFrameArrivedEventArgs e) 
     { 
      var reference = e.FrameReference.AcquireFrame(); 



      // Body 
      using (var frame = reference.BodyFrameReference.AcquireFrame()) 
      { 
       if (frame != null) 
       { 
        Body body = frame.Bodies().Closest(); 

        if (body != null) 
        { 
         _gestureController.Update(body); 
        } 
       } 
      } 
     } 

     void GestureController_GestureRecognized(object sender, GestureEventArgs e) 
     { 
      lbGesture.Content = e.GestureType.ToString(); 
     } 

    } 
} 

Espérons vraiment que quelqu'un peut aider à résoudre ce problème! Merci d'avance.

Répondre

1

Vous essayez d'utiliser un ensemble qui a été compilé pour x64 (ou plutôt dit de générer du code 64 bits du MSIL) .... mais votre application est très probablement ciblage x86 ... (ou utilise AnyCPU et votre fonctionnant sur une version 32 bits de Windows).

Votre projet et les assemblages référencés doivent se résoudre à la même "architecture". En regardant le code du projet sur github, il semble que les fichiers du projet ont été modifiés pour explicitement définir des références 64 bits. Cela signifie que cela ne fonctionnera que si vous utilisez une machine 64 bits et que vous utilisez AnyCPU sur votre projet, ou x64 comme type de plate-forme.

Voyez comment quelqu'un a modifié cette configuration x86 pour utiliser x64.

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> 
    <PlatformTarget>x64</PlatformTarget> 
    <OutputPath>bin\x86\Release\</OutputPath> 
    </PropertyGroup> 

et il utilise seulement une référence à une saveur de 64 bits de la bibliothèque kinect.

<Reference Include="Microsoft.Kinect, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=AMD64"> 

Si vous voulez avoir une application 32 bits, vous devez utiliser x86 comme types de plate-forme, et vous avez besoin de changer cette référence il est donc 32bit.

voir: How do I fix the Visual Studio compile error, "mismatch between processor architecture"?

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <DebugType>pdbonly</DebugType> 
    <Optimize>true</Optimize> 
    <OutputPath>bin\Release\</OutputPath> 
    <DefineConstants>TRACE</DefineConstants> 
    <ErrorReport>prompt</ErrorReport> 
    <WarningLevel>4</WarningLevel> 
    <Prefer32Bit>false</Prefer32Bit> 
    <PlatformTarget>x64</PlatformTarget> 
    <DocumentationFile>bin\Release\LightBuzz.Vitruvius.XML</DocumentationFile> 
    </PropertyGroup> 
    <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> 
    <PlatformTarget>AnyCPU</PlatformTarget> 
    <OutputPath>bin\x86\Debug\</OutputPath> 
    </PropertyGroup> 
    <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> 
    <PlatformTarget>x64</PlatformTarget> 
    <OutputPath>bin\x86\Release\</OutputPath> 
    </PropertyGroup> 
    <ItemGroup> 
    <Reference Include="Microsoft.Kinect, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=AMD64"> 
     <SpecificVersion>False</SpecificVersion> 
     <HintPath>..\..\..\..\..\..\Program Files\Microsoft SDKs\Kinect\v2.0-DevPreview1404\Assemblies\Microsoft.Kinect.dll</HintPath> 
    </Reference> 
+1

Oh merci!Après avoir changé pour x64 ça a bien fonctionné maintenant. – bingcheng45