C# 加上一句「;winmd";参考与添加项目参考 我有一个Windows电话8项目,另一个项目是用C++编写的;两者都在同一个解决方案中。C++项目是WP8项目中使用的动态库,它被配置为在 > DLL< /Cord>文件> 上生成一个Windows Meta文件( .WINMD < /代码>)。 在WP8项目中添加C++项目作为项目引用时,一切都很好。

C# 加上一句「;winmd";参考与添加项目参考 我有一个Windows电话8项目,另一个项目是用C++编写的;两者都在同一个解决方案中。C++项目是WP8项目中使用的动态库,它被配置为在 > DLL< /Cord>文件> 上生成一个Windows Meta文件( .WINMD < /代码>)。 在WP8项目中添加C++项目作为项目引用时,一切都很好。,c#,.net,visual-studio,visual-studio-2012,windows-phone-8,C#,.net,Visual Studio,Visual Studio 2012,Windows Phone 8,但是,我希望直接引用二进制文件而不是项目,因此我尝试引用.dll本身,但VS2012不允许我这样做(我完全理解这一点,因为我所理解的库是非托管的)。添加.winmd文件反而有效,我的意思是它编译时没有警告/错误;但是它在运行时崩溃(我得到了 ToeVoCuraExtExabutix/Cuth>,这是因为无法找到C++库的“实际”代码。 添加.winmd文件时,我确保.dll文件就在它旁边。将这两个文件放在WP8项目的bin目录中也不起作用 我在网上找不到任何线索,如果你能给我一些,我将不胜感激,

但是,我希望直接引用二进制文件而不是项目,因此我尝试引用
.dll
本身,但VS2012不允许我这样做(我完全理解这一点,因为我所理解的库是非托管的)。添加
.winmd
文件反而有效,我的意思是它编译时没有警告/错误;但是它在运行时崩溃(我得到了<代码> ToeVoCuraExtExabutix/Cuth>,这是因为无法找到C++库的“实际”代码。 添加
.winmd
文件时,我确保
.dll
文件就在它旁边。将这两个文件放在WP8项目的
bin
目录中也不起作用

我在网上找不到任何线索,如果你能给我一些,我将不胜感激,欢迎任何提示

下面是我试图建立的一个简单体系结构的模式:

下面是引发的异常的堆栈跟踪:

at System.StubHelpers.StubHelpers.GetWinRTFactoryObject(IntPtr pCPCMD)
   at Sqlite.Sqlite3.sqlite3_open_v2(String filename, Database& db, Int32 flags, String zVfs)
   at SQLite.SQLite3.Open(String filename, Database& db, Int32 flags, IntPtr zVfs)
   at SQLite.SQLiteConnection..ctor(String databasePath, SQLiteOpenFlags openFlags, Boolean storeDateTimeAsTicks)
   at SQLite.SQLiteConnection..ctor(String databasePath, Boolean storeDateTimeAsTicks)
   at WP8ClassLibrary.SomeManager..ctor(String databasePath)
   at WP8App.SomeViewModel..ctor()
   at WP8App.MainPage..ctor()

工具+选项、项目和解决方案、构建和运行。将“MSBuild项目生成输出详细信息”设置更改为正常


注意构建输出,即在“XapPackager”之后看到的消息。显示要添加到Xap包的文件。您的DLL必须在该列表中。如果不是,则您的程序将失败,如上所述。在这种情况下,您需要找出它被跳过的原因。首先检查.winmd引用的Copy-Local属性是否为True。

我成功地使它工作了。正如原始帖子中的stacktrace所建议的,我在应用程序中使用SQLite。如果我将“代码> WiMd< /COD>文件作为引用而不是C++项目添加,看起来有些依赖项不满足。
因此,我不得不在
WP8ClassLibrary
项目中添加对
SQLite for Windows Phone
的引用。这是我的一个愚蠢的错误,因为这个C++项目本身可能带有这个依赖性(有几个<代码> WINMD < /Cord>引用,但是我不能猜出它们是Windows Fux<代码>的代码> SQLite的一部分,基于它们的模糊名称)。

如果你试图将C++库直接添加到C代码中(对于我的Windows Windows 8.1应用程序),那么包括.WINMD文件可以编译,但是应用程序在启动时崩溃。堆栈跟踪只表示加载C++ +dll失败。


<>我还必须在C++应用程序中添加VisualStudioC++运行库的引用。我通过对Work.xAP(从C和C++项目中的解决方案创建)和非工作.XAP(从只包含C +项目和C++的WiMD文件)的解决方案创建的XAP(Access)来发现缺失引用。谢谢您的回答。复制本地属性设置为true;并且
winmd
all
文件都在
Begin Xap packaging
之后显示的列表中。我在原来的帖子中将情况简化了一点;我有一个C++文件,产生了<代码> DLL<代码>和<<代码> WiMd,这个代码> WiMd</代码>用于WP8类库项目中,它产生了 DLL<代码>在一个“具体”的WP8项目中使用。两个
dll
winmd
文件在生成过程中被正确复制。您没有帮助我帮助您。“所有”文件?两个DLL?您现在有了一种方法来诊断这两种方法之间的区别,但没有提到任何区别。我也没有详细的异常消息来查看。如果你不能更好地记录它,我就不得不推荐一个项目参考。很抱歉,我指的是“
winmd
dll
文件”,不知怎么的,我的手指滑向了
a
键。。。