从另一个项目引用Windows Phone运行时组件DLL / WinMD

时间:2013-06-02 07:36:44

标签: c# visual-studio-2012 windows-phone-8 windows-phone c++-cx

我需要实现一个包装器来向C#公开一些本机C ++代码,并且已经遵循了本教程:

http://www.silverlightshow.net/items/Windows-Phone-8-Native-Code-Support.aspx

到目前为止,在我的C#测试项目中,只要我引用整个项目,我就没有问题从Runtime Component项目实例化一个用C ++ / CX编写的类并使用该类的方法。 em>(。ssln)。

Visual Studio不允许我单独引用Runtime Component DLL,但允许我引用项目中的.winmd文件。然后,C#正确识别命名空间,但是在运行时,我在尝试创建同一个对象时得到TypeLoadException

这似乎不是命名空间问题(如此处所述:Changing namespace name of C++ component in Windows Phone causes exception),因为只要我创建项目引用(或引用项目与.winmd会影响命名空间),一切都会正常不知何故?)。

是否可以以最终用户可以引用它的某种形式捆绑运行时组件,而无需提供整个项目?

3 个答案:

答案 0 :(得分:1)

我认为你所看到的是here所描述的问题的表现。

简而言之,在使用C ++创建WinRT组件时,仅引用输出DLL或输出winmd是不够的。你需要两者。

答案 1 :(得分:1)

您需要添加以下WMAppManifest.xml

<ActivatableClasses>
    <InProcessServer>
        <Path>YourComponent.dll</Path>
        <ActivatableClass ThreadingModel="both" ActivatableClassId="YourComponentNamespace.YourComponent"/>
    </InProcessServer>
</ActivatableClasses>

YourComponent是WinMD的名称。

答案 2 :(得分:1)

我遇到了同样的问题,并且(最终)发现.dll和.winmd文件需要具有相同的名称(与它们定义的命名空间相同)并且位于同一目录中。

例如,如果您的类位于X :: Y名称空间中,则文件必须是X.Y.dll和X.Y.winmd。

然后我需要做的就是在我的项目中添加对.winmd文件的引用(在解决方案资源管理器中右键单击该项目的References文件夹,选择“Add Reference ...”,然后选择“从出现的对话框中“浏览”。我不需要在清单文件中添加任何内容。