我需要担心版本冲突吗?

5

我最近将我的devArt dotConnect for Oracle组件从版本6.?更新到了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

因此,存在版本不匹配,但不存在运行时版本不匹配。我不知道这是否是问题所在。如果警告消息更加明确,那就太好了。想必“它”知道问题的确切原因-为什么它不透露这个关键信息呢?

更新2

我有另一个项目使用完全相同的两个引用。安装更新的组件后,它甚至无法编译。为什么两个项目之间会有这样的差异?因此,即使.DLL是相同的(名称相同,在磁盘上的位置相同),我将其从第二个项目中删除,然后再添加回去,它就可以正常运行-没有错误,也没有警告。 但是,我回到第一个项目,仍然收到相同的警告,我删除并重新添加了这两个引用/ DLL-我仍然收到相同的警告。所以我还不知道该怎么做/是否应该接受VS提供的重定向建议(我在脑海中想象着“老学校”电话操作员将电线重新连接成各种方式,做出值得青少年Twister爱好者的旋转)。


2
不错的标题。如果你没有明显地颤抖,那么你就没有足够认真对待这件事情。准备一些武器吧。 - Nick Vaccaro
2
这个警告让我感到害怕,尽管它并不是针对我的。 - Kai Qing
谁说过:“如果你不担心,那就说明你没有理解情况”或者“你没有在关注”? - B. Clay Shannon-B. Crow Raven
2个回答

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 dlls的位置,并确保它们都引用同一个版本。如果必要的话,可以将希望使用的Devart dlls复制到解决方案文件夹中,并使所有项目都指向该文件夹。


1

是的,你应该担心。你有两个程序集(比如MyAssembly1和MyAssembly2)引用了同一个程序集(比如MySharedAssembly),但是版本不同。只能加载并使用一个版本的MySharedAssembly在你的应用程序中,因此MyAssembly1和MyAssembly2需要正确地与它一起工作。

你必须引用旧版本的MySharedAssembly。所以一个问题是MySharedAssembly是否向后兼容?如果不是,那么你的应用程序可能无法正常工作。

如果你在配置文件中添加重定向,你基本上是在说任何试图加载旧版本MySharedAssembly的程序集都应该使用新版本。所以如果MySharedAssembly向后兼容,那么你肯定可以这样做。但这需要你的应用程序有一个配置文件。

你最好的选择是找到引用共享程序集的程序集,并查看它们是否有更新,使用最新和最棒的版本。


有没有办法找出被多个程序集引用的程序集是哪一个?我只有一个解决方案中的一个项目,所以我无法弄清楚这是如何发生的。 - B. Clay Shannon-B. Crow Raven
@ClayShannon - 如果您在 Reflector 中加载程序集,那么它将告诉您每个程序集引用了什么。请参见 https://dev59.com/XUnSa4cB1Zd3GeqPOHM5 - CodeNaked
我不知道是哪个汇编引起了问题 - 错误信息非常模糊。 - B. Clay Shannon-B. Crow Raven
@ClayShannon - 你可以加载主程序集,然后跟随它的引用并检查它们的引用。 - CodeNaked
事实上,原来是DevArt组件的问题 - 引用了不同版本的组件。 - B. Clay Shannon-B. Crow Raven
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接