您好我最近遇到过vitruvius并且希望在wpf项目中实现他们的插件以使用kinect手势但是甚至无法使用他们的教程,如下所示。
已经按照每个步骤操作并下载了他们的示例工作代码,但是他的错误信息如下所示。
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();
}
}
}
真的希望有人可以帮忙解决这个问题!先谢谢你。
答案 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>