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

C# 如何不引用程序集的特定版本?,c#,oracle,visual-studio,build,versioning,C#,Oracle,Visual Studio,Build,Versioning,我有一个Visual Studio 2010项目,我引用了一个指向本地版本的程序集Oracle.DataAccess.dll 我已经显式地将选项“Specific Version”设置为false,但是在构建应用程序时,我已经检查了应用程序程序集,并且它具有对 Oracle.DataAccess,版本=2.112.3.0,区域性=中性,PublicKeyToken=89b483f429c47342 如何不引用程序集的特定版本 我想取决于bin文件夹中的可用版本 它目前显然取决于应用程序的构建位置

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

我已经显式地将选项“Specific Version”设置为false,但是在构建应用程序时,我已经检查了应用程序程序集,并且它具有对

Oracle.DataAccess,版本=2.112.3.0,区域性=中性,PublicKeyToken=89b483f429c47342

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

我想取决于bin文件夹中的可用版本

它目前显然取决于应用程序的构建位置。如果我在安装了不同版本的Oracle客户端的计算机上构建项目,则主应用程序中会有不同的Oracle.DataAccess版本控制引用


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

由于您在项目中引用了该.dll,因此无法避免指定版本。如果要调用.dll文件而不依赖其版本,则必须在代码中进行调用。请参见

特定版本是编译时检查您实际生成的版本是否是您在项目/文件引用中实际拥有的版本

编译时所依据的版本作为引用的程序集进入编译后的程序集元数据。这包括程序集版本号,因为它是CLR程序集标识的一部分。如果输出程序集中不包含版本,则无法引用其他程序集

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


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

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


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

对于Oracle.DataAccess,情况有点特殊。请参阅已安装Oracle.DataAccess的屏幕截图

您可以安装verison 1.x、2.0或4.0,请参阅此处的可用下载:

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

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

您可以在此处找到更多信息:


My installed Oracle.DataAccess

该选项位于dll引用中,并表示可以将“特定版本”设置为false,那么这是Visual Studio错误吗?