【问题标题】:How not to reference a specific version of an assembly?如何不引用程序集的特定版本?
【发布时间】:2013-12-12 07:57:13
【问题描述】:

我有一个 Visual Studio 2010 项目,并且我引用了一个指向本地版本的程序集 Oracle.DataAccess.dll。

我已将“特定版本”选项明确设置为 false,但在构建应用程序时,我检查了应用程序程序集,并且它具有对

的特定引用

Oracle.DataAccess,版本=2.112.3.0,文化=中性,PublicKeyToken=89b483f429c47342

如何不引用特定版本的程序集?

我想依赖 bin 文件夹中可用的版本。

目前显然取决于应用程序的构建位置。如果我在安装了不同版本的 Oracle 客户端的机器上构建项目,那么主应用程序中将有不同的 Oracle.DataAccess 版本控制参考。

它不应该依赖于应用程序的真正构建位置。它不应引用任何特定版本。

【问题讨论】:

    标签: c# oracle visual-studio build versioning


    【解决方案1】:

    特定版本是一个编译时检查,您实际构建的版本是您在项目/文件参考中实际拥有的版本。

    您编译的任何版本都会作为引用的程序集进入已编译的程序集元数据。这包括程序集版本号,因为它是程序集对 CLR 的标识的一部分。如果没有版本包含在输出程序集中,就无法引用另一个程序集。

    对于您的场景,我可能会将特定版本设置为 true,因此如果我在安装了不同版本的机器上构建它,编译会失败。然后,如果我想针对新版本进行编译,我会更新项目文件。

    如果您想针对可能较新版本的引用程序集运行,则可以通过 policy 正确控制。 Oracle 将提供的发布者策略文件,或者如果您确定您的应用程序与较新版本完全兼容,则通过应用程序配置程序集绑定重定向。这个documentation 提供了一个通过配置文件重定向的例子。

    【讨论】:

      【解决方案2】:

      既然您在项目中引用该 .dll,您就无法避免指定版本。如果您想在不依赖其版本的情况下调用 .dll 文件,则必须在代码中执行此操作。见this

      【讨论】:

      • dll 参考上有该选项,并说您可以将“特定版本”设置为 false,所以这是 Visual Studio 错误吗?
      【解决方案3】:

      如果将 SpecificVersion 设置为 false,则可以轻松替换引用的程序集,它将正常工作。您提到的版本仅表示构建项目的版本。

      您可以轻松检查此行为。创建一个包含一个类的类库项目,其中包含一个返回一些字符串消息的公共方法。构建它并将生成的程序集放在您将引用它的某个文件夹中。然后创建一个控制台项目,该项目将使用 SpecificVersion=false 和 CopyLocal=true 引用您的程序集,并将消息输出到控制台。构建它并运行。之后,更改第一个项目中返回的字符串、更改版本、构建和替换控制台项目可执行文件附近的程序集。再次运行,您会看到该消息已更改。

      【讨论】:

        【解决方案4】:

        对于 Oracle.DataAccess,情况有点特殊。查看我安装的 Oracle.DataAccess 的屏幕截图

        您可以安装版本 1.x、2.0 或 4.0,请在此处查看可用下载: Oracle Data Access Components (ODAC) for Windows

        这还取决于您安装的 Oracle 客户端版本。 ODP.NET 版本 1.x 仅在 Oracle 11.1 之前可用。 版本 1.x 和 2.0 并非 100% 相互兼容(但可以在同一代码中管理它们)。在 VS 中,您指定版本,例如2.0。在这种情况下,您的机器上必须安装 2.x.x.x 版本,在我的情况下,它将加载 2.102.2.20,请参阅早期答案中的 policy。 如果您指定版本 1.x,则必须在您的计算机上安装版本 1.x.x.x。 对于 4.0 版,我还没有测试。

        在我开发的应用程序中,我提供了两个不同的 Setup.exe。客户必须根据他的 Oracle 客户端安装选择正确的设置。

        您可以在这里找到更多信息:ODP.NET FAQ

        我安装的 Oracle.DataAccess

        【讨论】:

          猜你喜欢
          • 2011-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-05
          • 1970-01-01
          • 2013-09-29
          • 1970-01-01
          相关资源
          最近更新 更多