c# - 序列化类型化数据集、更新程序集、反序列化错误

标签 c# serialization strongly-typed-dataset

我的项目使用类型化数据集来处理其数据。一些数据表中的某些列使用自定义程序集中的类型。当数据集被序列化时,它会像这样保存列和数据类型

<xs:element name="Mode" msdata:DataType="MyAssembly.Adapters.Mode, MyAssembly, Version=6.3.1.0, Culture=neutral, PublicKeyToken=dab9b4e6f12a95d2" type="xs:anyType" minOccurs="0" />

现在,当程序集 MyAssembly 更新时,该全名不再匹配,因此当程序重新运行并尝试反序列化 xml 时,会引发异常,指出无法找到版本 6.3.1.0 的程序集。

我尝试删除全名,如下所示,只保留类型,但这是不合法的。

<xs:element name="Mode" msdata:DataType="MyAssembly.Adapters.Mode" type="xs:anyType" minOccurs="0" />

有人知道如何在使用更新的程序集类型时反序列化吗?

最佳答案

几年后我不得不重新审视这个解决方案,我对这个解决方案并不满意,并提醒我这看起来就像 binding redirection 解决的问题一样。 .

将以下内容添加到主应用程序项目的配置文件中。它应该输出app.exe.config。

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Assembly" publicKeyToken="token" culture="neutral" />
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

如果是NUnit,则将应用程序配置文件添加到NUnit项目中。它应该输出 Assembly.dll.config

现在无需重写 XML。

关于c# - 序列化类型化数据集、更新程序集、反序列化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13680273/

相关文章:

c# - .Net session 范围变量?

c# - MVC 日期时间列表未保存

java - 子类化列表和 Jackson JSON 序列化

visual-studio-2010 - Visual Studio 自动调整设计器文件上的命名空间

.net - 从 XML 文档加载类型化数据集

c# - 用户友好的 Jenkins CI 作业计划格式

c# - 使用C#隐藏任务栏

java - jquery datepicker 和序列化问题

java - 将 ArrayList 保存到文件

.net - 数据集中的可空 Int 列