2016-03-08 69 views
2

我计划使用两个Kinect。我已经安装了Kinect的VS C#,SDK 1.8和2.0,我的问题是:安装两个kinect:v1和v2

添加一个参考库(例如1.8)后,不能添加另一个参考库(例如2.0,消息“the参考...已经存在“)。我认为这是由于命名空间和类的名称是相同的。因此,我不能实例化第二个传感器,请问我该怎么做才能解决它,特别是如果有任何方法可以访问相同资源的不同版本(例如1.8版本和2.0版本中的KinectSensor类),那么,我不能实例化第二个传感器。 )?

回答

1

您的问题有几种解决方案。第一个(可能是最天真的)是创建两个不同的项目,每个项目都有不同的参考。然后你可以编写第三层,使用前两个项目提供的数据。

如果您确实需要在同一个项目中同时使用两个参考,但是还有其他选项,它包含使用extern别名

首先,添加一个单引用(例如,Microsoft.Kinect,版本1.8)。然后,保存您的项目并关闭Visual Studio。在项目文件夹中,您应该找到一个.csproj文件,您可以使用文本编辑器打开该文件。看着它的内容,你会发现这样一行:

<Reference Include="Microsoft.Kinect, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> 

现在,更改与下面的人上面的一行:

<Reference Include="Microsoft.Kinect, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
    <Aliases>KinectV1</Aliases> 
</Reference> 
<Reference Include="Microsoft.Kinect, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
    <Aliases>KinectV2</Aliases> 
</Reference> 

您现在应该看到在同一个项目都引用,也当你用Visual Studio打开它。

那么你应该能够使用这样的事情:

// You must declare aliases here: 
extern alias KinectV1; 
extern alias KinectV2; 

// Then some using... 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

// ... and do not forget Kinect! 
using KinectV1; 
using KinectV2; 

// Now you can do something like this: 
namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // Something from Microsft.Kinect V2 
      KinectV2.Microsoft.Kinect.HandState hs = KinectV2.Microsoft.Kinect.HandState.Closed; 

      // Something from Microsft.Kinect V1 
      KinectV1.Microsoft.Kinect.Skeleton s = new KinectV1.Microsoft.Kinect.Skeleton(); 
     } 
    } 
} 

如果你的项目没有进行编译,尝试关闭Visual Studio和删除隐藏名为.suo文件(在的同一个文件夹.sln您的项目文件)。

如果您还有其他麻烦,请关注this answer

+0

嗨维托外邦人,我解决了我的问题,通过使用DLL的外部别名。谢谢。 – Carl

+0

感谢你们,我尝试了使用VS2012,我已经开始工作了。值得注意的是,我的第二个参考文献仍然在旁边有一个黄色三角形,表明它没有工作。我一直在挠头,直到我用“extern alias”等方式继续前进。Intellisense有点不高兴,但最终所有工作都很好,使用这种解决方案! – Wiredchop