Vitruvius手势不起作用,System.Windows.Markup.XamlParseException

时间:2017-04-26 15:26:44

标签: c# wpf kinect kinect-sdk

您好我最近遇到过vitruvius并且希望在wpf项目中实现他们的插件以使用kinect手势但是甚至无法使用他们的教程,如下所示。

  

https://vitruviuskinect.com/blog/

已经按照每个步骤操作并下载了他们的示例工作代码,但是他的错误信息如下所示。

Click here to see the error message Image on Visual Studio

完整的错误消息如下所示。

  

严重级代码描述项目文件行抑制状态   警告处理器架构之间存在不匹配   该项目正在构建“MSIL”和处理器架构   参考“LightBuzz.Vitruvius,Version = 1.0.0.0,Culture = neutral,   processorArchitecture = AMD64“,”AMD64“。这种不匹配可能会导致运行时   故障。请考虑更改目标处理器架构   您的项目通过配置管理器,以便对齐   您的项目和参考之间的处理器架构,或采取   依赖于具有匹配的处理器体系结构的引用   项目的目标处理器架构。 TEST2

在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();
        }

    }
}

真的希望有人可以帮忙解决这个问题!先谢谢你。

1 个答案:

答案 0 :(得分:1)

您正在尝试使用为x64编译的程序集(或者更确切地说是从MSIL生成64位代码)....但您的应用程序很可能定位x86 ...(或正在使用AnyCPU以及您在32位版本的Windows上运行。

您的项目以及您引用的程序集必须解析为相同的“体系结构”。

查看github上的项目代码,看起来项目文件已被编辑为明确设置64位引用。这意味着,它只有在64位计算机上,在项目中使用AnyCPU或x64作为平台类型时才有效。

了解有人如何更改此x86配置以使用x64。

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

它只使用了对kinect库的64位风格的引用。

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

如果您想拥有一个32位应用程序,那么您需要使用x86作为平台类型,并且您需要更改该引用以使其为32位。

请参阅: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>