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