【问题标题】:SQL CE 3.5 deployment problem, concerning interop between C# and C++SQL CE 3.5 部署问题,涉及 C# 和 C++ 之间的互操作
【发布时间】:2008-10-27 13:41:02
【问题描述】:

我们有一个 C# 应用程序正在使用 SQL CE 3.5 的情况。为了允许遗留程序使用它的一些特性,我们制作了一个 C++ dll,它使用互操作从 C# 程序中提取它需要的信息。为此,C# 程序需要访问数据库。这不是一个非常复杂的场景。

尝试使用私有安装进行部署时,会出现一些问题。 C#程序没有问题,它可以访问数据库并使用它没有任何问题。

但是,当尝试通过 C++ 互操作访问 C# 程序中的函数时,强制 C# 程序访问数据库时,我们遇到了一个崩溃,异常说“...提供者:System. Data.SqlServerCe.3.5 未安装”。

这显然是因为我们无法将 App.config 文件添加到正在执行的程序中。

我们怎样才能解决这个问题?还有其他方法可以解决这个问题吗?任何其他形式的 SQL CE 3.5 安装方法都是不可能的。所以我们必须让它发挥作用。

问候,

P

编辑:

我不是直接针对 SQL CE,而是通过 Linq2SQL。我试图将配置文件添加到我所有的 dll 中,它没有帮助。似乎只有可执行文件是否有 app.config 才重要。

抛出的异常说 - 未安装提供程序 System.Data.SqlServerCe.3.5。

并且根据堆栈跟踪要调用的最新函数是 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Initialize(...)。

编辑 2

我已经添加了部署工作所需的所有文件。正如我在上面所写的,如果我通过一个带有 app.config 文件的 .net 可执行文件使用程序 dll(它使用 Linq 2 Sql),它可以工作,该文件指定在哪里查找 SQL CE 3.5 dll。部署将仅使用文件,app.config 文件是必需的。

问题是我们必须通过 C++ 可执行文件来使用 dll 文件,它无法告诉 .net 在哪里寻找 Sql Ce 3.5 dll。

【问题讨论】:

    标签: c# c++ sql deployment interop


    【解决方案1】:

    将以下文件添加到您的应用程序文件夹:

    • sqlceca35.dll
    • sqlcecompact35.dll
    • sqlceer35E.dll
    • sqlceme35.dll
    • sqlceoledb35.dll
    • sqlceqp35.dll
    • sqlcese35.dll
    • System.Data.SqlServerCe.dll

    然后它会工作。

    如果您没有在目标机器上明确安装 sql server ce 3.5(我认为大多数部署都是这种情况),这是必要的。

    【讨论】:

      【解决方案2】:

      您可以添加一个 foo.dll.config 文件并确保它与 DLL 一起存在。您只需要确保您的 DLL 中有代码以确定它在磁盘上的位置,并从同一位置读取配置。

      祝你好运!

      【讨论】:

        【解决方案3】:

        这显然是因为我们无法将 App.config 文件添加到正在执行的程序中。

        为什么不呢?好的,所以 Visual Studio 不会自动构建配置文件并将其重命名并将其移动到输出目录,但是您是否尝试过在 C++ 应用程序旁边使用 .exe.config 文件?

        【讨论】:

          【解决方案4】:

          我还看到了一个实例,其中 GAC 中的 System.Data.SqlServerCe.dll 是错误的文件版本,我从 cmd 命令提示符替换了 GAC 中的 dll。

          文件必须在文件夹中的观点是正确的 - 除非 GAC 被多个版本弄糊涂

          【讨论】:

            【解决方案5】:

            不要使用 LINQ,而是使用 SqlCeConnection、SqlCeCommand 等作为您从 C++ 程序调用的方法

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-01-15
              • 2023-03-02
              • 1970-01-01
              • 2017-10-26
              • 1970-01-01
              • 1970-01-01
              • 2014-05-04
              • 1970-01-01
              相关资源
              最近更新 更多