是否可以在运行时将System.Data.SqlServerCe 4.0.0.0与版本4.0.0.1交换

本文关键字:版本 交换 SqlServerCe Data 运行时 System 是否 | 更新日期: 2023-09-27 17:57:02

我的应用程序引用了一个库项目,该项目将System.Data.SqlServerCe 4.0.0.0作为依赖项。

但是,我正在尝试私下部署我的应用程序,这需要System.Data.SqlServerCe 4.0.0.1。

因此,我设置了我的应用程序,以便将 System.Data.SqlServerCe 4.0.0.1 复制到输出目录(与可执行文件相同的文件夹中),并将 assemblyBinding 添加到我的 App.config 文件中:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  ...
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity
          name="System.Data.SqlServerCe.dll"
          publicKeyToken="89845dcd8080cc91" />
        <bindingRedirect oldVersion="4.0.0.0" newVersion="4.0.0.1" />
        <codeBase version="4.0.0.1" href="System.Data.SqlServerCe.dll" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

不幸的是,我收到此错误:

无法加载文件或程序集"System.Data.SqlServerCe,版本=4.0.0.0,区域性=中性,公钥令牌=89845dcd8080cc91"或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT的例外:0X80131040)

问题

是否可以在运行时将System.Data.SqlServerCe 4.0.0.0与版本4.0.0.1交换以允许私有部署?

是否可以在运行时将System.Data.SqlServerCe 4.0.0.0与版本4.0.0.1交换

您是否尝试删除代码库标记:http://blogs.msdn.com/b/sqlservercompact/archive/2010/05/12/troubleshooting-problem-with-private-deployment-of-sql-server-compact-3-5sp2-entity-dll.aspx看起来您也应该从名称中删除.dll。下面的配置文件可以强制 Exportsqlce40.exe 针对私有 dll 文件运行(然后它们必须与.exe位于同一文件夹中):

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845dcd8080cc91" />
        <bindingRedirect oldVersion="4.0.0.0" newVersion="4.0.0.1" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
我认为如果不重新

编译,当程序集的版本号不同时,您不能交换程序集。

抱歉,无论如何,我的答案似乎不正确。我只知道在构建时创建的程序集清单中的静态引用。

ErikEJ的答案对于您要做的事情似乎是正确的。另外,我认为您不需要assemblyIdentity中的*.dll。从我阅读的文档中,仅当您尝试引用远程程序集或相对于应用程序的另一个文件夹中的程序集时,才需要 codeBase。

如果这不起作用,您可以尝试删除 assemblyIdentity 元素的 publicKeyToken 属性,或者通过从 VS 命令行运行"sn –T System.Data.SqlServerCe.dll"来验证公钥。