我最近在版本6中更新了我的devArt dotConnect for Oracle组件。到7.2
一切似乎都很好。
然而,在编译时我发现我收到了警告:“发现同一个依赖程序集的不同版本之间存在冲突。”
我不知道这是否与dotConnect组件有关(它没有说明),但我认为这是一个非常好的猜测。
当我点击警告时,我会看到对话框:
MS Visual Studio - 一个或多个依赖程序集具有版本 冲突。
是否要通过添加绑定重定向记录来修复这些冲突 在app.config文件中?
他们(MS)或它(VS)有多好,但是......它会做什么?它并没有真正告诉我。我应该留下还是应该去?
我引用了两个DevArt dotConnect for Oracle组件:
Devart.Data -和 Devart.Data.Oracle
Devart.Data: 运行时版本v2.0.50727,版本5.0.555.0
Devart.Data.Oracle: 运行时版本v2.0.50727,版本7.2.96.0
所以有一个版本,但不是运行时版本,不匹配。我不知道这是不是问题。如果警告信息更明确,那将是很好的。据推测,“它”确切地知道问题是什么 - 为什么它不会泄露那些至关重要的信息呢?
我有另一个使用完全相同的两个引用的项目。安装更新的组件后甚至无法编译。为什么两个项目之间的区别呢?因此即使.DLL是相同的(相同的名称,磁盘上的相同位置),我删除它们然后将它们添加回第二个项目,它运行良好 - 没有错误,没有警告。但是,我回到第一个项目,仍然得到相同的警告,我删除并添加了这两个引用/ DLL - 我仍然得到相同的警告。所以我仍然不知道该怎么做/我是否应该把VS提出重新定位的提议/建议(我在脑海中想象“老学校”电话运营商每一个方向重新连接电线,做一些值得青少年的旋转afister aficianados )。
答案 0 :(得分:3)
绑定记录会将绑定部分添加到web.config(或app.config)文件中,该文件将指定版本的dll指向另一个版本。如果彼此之间不兼容,这可能是危险的。他们看起来像
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
然而,在去之前检查不同项目链接你的Devart dll并确保它们都引用相同的内容。在极端情况下,将您想要使用的Devart dll复制到解决方案的文件夹中,并使所有项目都指向该项目
答案 1 :(得分:1)
是的,你应该担心。你有两个程序集(比如说MyAssembly1和MyAssembly2)引用同一个程序集(比如MySharedAssembly),但它们的版本不同。只能加载一个版本MySharedAssembly并使用您的应用程序,因此MyAssembly1和MyAssembly2需要正确使用它。
必须引用旧版MySharedAssembly。所以一个问题是MySharedAssembly是否向后兼容?如果没有,那么您的应用程序可能无法正常工作。
如果将重定向添加到配置中,则基本上是说任何尝试加载旧版MySharedAssembly的程序集都应该使用较新版本。因此,如果MySharedAssembly向后兼容,那么你肯定可以逃脱这一点。但它需要您的应用程序有一个配置文件。
您最好的选择是找到引用共享程序集的程序集,并查看是否有使用最新版本的更新程序。