我的应用程序引用了一个具有 System.Data.SqlServerCe 4.0.0.0 作为依赖项的库项目。
但是,我正在尝试私有(private)部署我的应用程序,这需要 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>
不幸的是,我收到此错误:
Could not load file or assembly 'System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0X80131040)
问题
是否可以在运行时将 System.Data.SqlServerCe 4.0.0.0 与版本 4.0.0.1 交换以允许私有(private)部署?
最佳答案
您是否尝试删除 CodeBase 标记: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 针对私有(private) 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>
关于c# - 是否可以在运行时将 System.Data.SqlServerCe 4.0.0.0 与版本 4.0.0.1 交换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6078596/