C# 加载Zumero模块依赖项时出现问题

C# 加载Zumero模块依赖项时出现问题,c#,sql-server,sqlite,windows-runtime,zumero,C#,Sql Server,Sqlite,Windows Runtime,Zumero,我开始使用System.Data.SQLite并选择load_extensionpath/to/zumero.dll,但目前正在使用SQLite windows shell,因为我认为我在某种程度上做错了。我在shell中遇到的错误与我在C世界中尝试加载扩展时遇到的错误相同 sqlite> .load "windows\ext\x64\zumero.dll"; Error: The specified module could not be found. 指定绝对路径会导致相同的错误消息

我开始使用System.Data.SQLite并选择load_extensionpath/to/zumero.dll,但目前正在使用SQLite windows shell,因为我认为我在某种程度上做错了。我在shell中遇到的错误与我在C世界中尝试加载扩展时遇到的错误相同

sqlite> .load "windows\ext\x64\zumero.dll";
Error: The specified module could not be found.
指定绝对路径会导致相同的错误消息。当我使用dependency walker打开它时,显然缺少以下依赖项:

API-MS-WIN-CORE-COM-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
API-MS-WIN-SHCORE-SCALING-L1-1-0.DLL
DCOMP.DLL
IESHIMS.DLL
我觉得我一定是做错了什么,对WinRT的依赖似乎很奇怪,但我真的看不出是什么。最终的游戏是在Win Server 2008 R2机器上安装一个C web应用程序,该应用程序将数据写入Zumero SQLite实例,该实例将与多个移动设备同步


干杯

我立即重现了您的问题,并有一种感觉,一定是有一段时间做错了什么,因为我知道这早在XP系统上就已经测试过了。原来这是字符串中反斜杠的问题;SQLite使用它们进行转义。只需使用正斜杠/或将其加倍\\。我将在自述中添加一个明确的注释


我同意WinRT依赖项乍一看似乎很奇怪。看起来它们最终都是Zumero依赖wininet.dll的结果。WinRT dll位于系统模块下面,如shell32.dll。有趣的是,它们在系统中的深度,尽管我想最终这并不太令人惊讶。

我立即重现了您的问题,并有一段时间有同样的感觉,一定是做错了什么,因为我知道早在XP系统上就已经测试过了。原来这是字符串中反斜杠的问题;SQLite使用它们进行转义。只需使用正斜杠/或将其加倍\\。我将在自述中添加一个明确的注释


我同意WinRT依赖项乍一看似乎很奇怪。看起来它们最终都是Zumero依赖wininet.dll的结果。WinRT dll位于系统模块下面,如shell32.dll。有趣的是,它们在系统中的深度有多深,尽管我想最终这并不太令人惊讶。

我仍然有不同斜杠的错误-向前、向后、绝对路径,所有这些都会导致相同的错误。我已经从sqlite外壳中复制了路径,并毫无问题地完成了目录列表。从zumero_客户机_sdk的根目录中选择要使用的正确文件夹?我正在使用Win7-64 bitI尝试了一下32位dll,它运行起来没有问题-不过我肯定是在64位机器上。。。想法?需要匹配的是代码的细微之处。64位Windows可以运行64位和32位代码,但单个进程中的所有代码都必须匹配。您必须使用32位SQLite shell,因此Windows只能将32位DLL加载到该进程中。您应该能够使用任务管理器验证SQLite shell进程是否为32位。我认为在Win7上,它会在进程名上加上*32或类似的后缀。使用32位shell应该不会有任何问题,不过如果你真的愿意,你可以自己构建一个64位shell。因为你正在构建一个.NET应用程序,所以你必须格外小心位的不确定性。默认情况下,.NET应用以任何CPU为目标,这实际上意味着它们的代码在64位系统上是64位的,在32位系统上是32位的,这会影响您需要加载的扩展。您需要在运行时检测机器的位冗余度并加载匹配的扩展,或者需要将应用程序显式构建为x86 32位或x64 64位,而不是任何CPU。我建议使用后一种方法,除非有非常令人信服的理由,您需要针对任何CPU,而通常没有。我仍然有不同斜杠的错误-正向、双向、绝对路径,所有这些都会导致相同的错误。我已经从sqlite外壳中复制了路径,并毫无问题地完成了目录列表。从zumero_客户机_sdk的根目录中选择要使用的正确文件夹?我正在使用Win7-64 bitI尝试了一下32位dll,它运行起来没有问题-不过我肯定是在64位机器上。。。想法?需要匹配的是代码的细微之处。64位Windows可以运行64位和32位代码,但单个进程中的所有代码都必须匹配。您必须使用32位SQLite shell,因此Windows只能将32位DLL加载到该进程中。您应该能够使用任务管理器验证SQLite shell进程是否为32位。我认为在Win7上,它会在进程名上加上*32或类似的后缀。使用32位shell应该不会有任何问题,不过如果你真的愿意,你可以自己构建一个64位shell。因为你正在构建一个.NET应用程序,所以你必须格外小心位的不确定性。默认情况下,.NET应用以任何CPU为目标,这实际上意味着它们的代码在64位系统上是64位的,在32位系统上是32位的,这会影响您需要加载的扩展。你要么需要检测m achine在运行时的位延迟并加载匹配的扩展,否则您需要显式地将应用程序构建为x86 32位或x64 64位,而不是任何CPU。我建议使用后一种方法,除非有非常令人信服的理由,您需要针对通常没有的任何CPU。