2017-04-26 4 views
0

最近、私はvitruviusを訪れ、kinectジェスチャーを使用するwpfプロジェクトでプラグインを実装したいと考えましたが、以下に示すようにチュートリアルでもできませんでした。Vitruviusジェスチャーが動作していない、System.Windows.Markup.XamlParseException

https://vitruviuskinect.com/blog/

は、各ステップに続き、彼らのサンプルワーキングコードをダウンロードしたが、彼は、このエラーメッセージを以下に示します持っていました。

Click here to see the error message Image on Visual Studio

完全なエラーメッセージを以下に示します。

重大度コード説明プロジェクトファイルの行抑制状態 警告「MSIL」と 参照「LightBuzz.Vitruvius、バージョン= 1.0のプロセッサアーキテクチャを構築されて プロジェクトのプロセッサアーキテクチャの間に不一致がありました。 0.0、文化=ニュートラル、 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

x64用にコンパイルされた(またはMSILから64ビットコードを生成するように指示された)アセンブリを使用しようとしています...しかし、アプリケーションはおそらくx86をターゲットにしています...またはAnyCPU Windowsの32ビット版で動作しています)。

あなたのプロジェクトと、参照しているアセンブリが同じ "アーキテクチャ"に解決されている必要があります。

githubのプロジェクトコードを見ると、プロジェクトファイルが64ビットリファレンスを明示的に設定するように編集されているようです。これは、64ビットマシンで、プロジェクトでAnyCPUを使用している場合、またはプラットフォームタイプとしてx64を使用している場合にのみ機能します。

x64を使用するためにこのx86構成がどのように変更されたかを参照してください。

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

キネクトライブラリの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> 
+1

ああ感謝を!私はx64に変更した後、今は正常に動作しました。 – bingcheng45

関連する問題