Oracle.DataAccess忽略特定版本= False

时间:2015-02-12 10:44:31

标签: c# visual-studio odp.net

我的数据库实用工具项目引用了Oracle.DataAccess 2.112.3.0,其被设置为特定Version = False,但引用此DB Utilities的项目需要这样的version (2.112.3.0)。查看下面的图片。

为什么会这样?

Oracle.DataAccess reference

GAC

1 个答案:

答案 0 :(得分:0)

除了oracle提供商的版本之外,还有很多东西都是突出的。

首先,我只是在项目中包含托管服务提供商。

对于您的特定情况,运行时问题与编译时问题不同。尽管“需要特定版本”,您仍然在针对特定版本进行编译。如果您的某个DBUtils方法正在返回对OracleConnection的引用,那么它将返回该OracleConnection的特定版本,并且该方法的调用者期望在编译时使用该特定版本。运行后,只要签名匹配,需要特定的version = false允许您更改dll。

另一个选择是您保留特定版本= true,而是依赖ODP.net附带的发布者策略。这样你依靠Oracle来说明哪些版本可以安全使用,并避免在完全不同的版本上运行时出现的一些瑕疵。请参阅此答案中的屏幕截图:https://stackoverflow.com/a/15509914/852208

但是我必须要问 - 我不确定你的DBUtils做了什么,但我想知道如果你仍然需要一个对它提供工具的db提供程序的引用是多么必要。在我这些年里,我从未有过DBUtils库。我有数据访问层完全抽象出db调用,或者我只是让我的业务库直接调用db调用。我从来不需要介于两者之间。

最后,当我通过Web应用程序创建客户端应用程序时,我仍然为客户端应用程序创建一个Web服务,其中一个最大的原因是避免客户端完全拥有数据库提供程序。您不仅跳过了这个额外的本地要求,而且还跳过了尝试保护数据库的混乱(除非您提示用户输入数据库凭据)。