适用于SAP HANA的ADO.NET提供程序 - 版本不匹配问题

时间:2017-07-21 09:17:54

标签: ado.net hana

我有一个WPF应用程序,它在我的本地开发环境中使用ADO.NET客户端用于SAP HANA(版本1.0.9.0),我在我的网站中添加了相同的SAP.DATA.HANA.v4.5.dll参考码。连接正常。

当我尝试在具有不同版本的ADO.NET客户端的服务器上运行相同的应用程序时,它会抛出错误。 它应该从位置(C:\ Program Files \ sap \ hdbclient \ ado.net \ v4.5)而不是版本号引用客户端?

有人可以解释我是否做错了。

1 个答案:

答案 0 :(得分:0)

你没有做错任何事。但我认为你错过了关于装配参考的关键知识。无论是对你还是SAP,都有办法解决它。

当.NET引用程序集时,它会针对编译时使用的确切版本执行此操作。这意味着如果在运行时版本号不同,则默认情况下会失败。用于强名称程序集或文化的签名密钥的差异也可能导致程序集加载失败。这个previous answer讨论了这个问题并提出了使用AssemblyResolve事件处理它的方法。如果您的应用程序具有复杂的插件加载机制,您可能还有很多工作要做,但如果它非常简单,您可以轻松地更新它。当然,如果客户端数据库发生了重大变化,您仍然会遇到问题,但它们会有不同的问题。

另一种方法是自行编辑您的应用程序configuration fileredirect assembly versions。有时Nuget包甚至被设置为自动将这些重定向插入到应用程序配置文件中。不幸的是,根据版本更改的频率,这不是一个简单的HANA策略。而且您需要知道要执行此操作的确切版本。因此,如果您将应用程序部署到具有不同HANA版本的多个客户端,则可能会有点噩梦。

令人遗憾的是,已经有一个现有机制来处理发布图书馆的供应商处理此类事情。它被称为publisher policy assembly,但SAP通过包含(和嵌入)有史以来最无用的绑定重定向来破坏其策略程序集的交付。

通常情况下,通过绑定重定向,只要您的类型没有显着更改其公共接口,目的就是允许将程序集无缝升级到更新版本。您所要做的就是在XML中指定此版本可以处理的版本范围。

然而,

SAP将其作为绑定重定向元素:

<bindingRedirect oldVersion="1.0.120.0-1.0.120.0" newVersion="1.0.120.0" />

对于允许当前安装的数据库客户端版本(在本例中为1.0.120.0),您有什么好处。不,这个DLL并没有足够的改变它的ADO.NET类来进行这种严格的版本控制。就我而言,关于不同装配版本的所有内容都是完全相同的。

如果我有能力与HANA团队中的某些人保持联系并且具有足够的影响力来解决这个问题,我建议他们将oldVersion属性正确设置为最旧的可升级版本,并在每个后续版本中进行升级驱动程序包。因此,如果您已安装1.0.120.0,则可以使用以下内容查看更多内容:

<bindingRedirect oldVersion="1.0.9.0-1.0.120.0" newVersion="1.0.120.0" />

然后它可以被机器上的任何软件使用而无需额外的努力。我的意思是,它在GAC中。他们不会那么努力使这个变得更加容易。虽然他们需要修补所有版本的HANA客户端,但许多应用程序(甚至是SAP提供的应用程序)都与特定的HANA版本相关联。如果他们只修改了最新版本,我们几年都不会看到它的好处。

相关问题