【问题标题】:Should I be worried about Version Conflicts?我应该担心版本冲突吗?
【发布时间】:2012-10-05 21:03:04
【问题描述】:

我最近从版本 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.数据: 运行时版本 v2.0.50727,版本 5.0.555.0

Devart.Data.Oracle: 运行时版本 v2.0.50727,版本 7.2.96.0

所以有一个版本,但没有一个运行时版本,不匹配。我不知道这是否是问题所在。如果警告信息更明确,那就太好了。大概“它”确切地知道问题出在哪里——它为什么不泄露这些重要信息?

更新 2

我有另一个项目使用完全相同的两个引用。安装更新的组件后甚至无法编译。为什么这两个项目有那么大的区别呢?因此,即使 .DLL 相同(名称相同,磁盘上的位置相同),我还是删除了它们,然后将它们添加回第二个项目,它运行良好 - 没有错误,没有警告。但是,我回到第一个项目,仍然收到相同的警告,我删除并添加了这两个引用/DLL——我仍然收到相同的警告。所以我仍然不知道该做什么/我是否应该接受 VS 的提议/重定向的建议(我在脑海中想象“老派”电话接线员以各种方式重新连接电线,做值得青少年 Twister 爱好者的旋转)。

【问题讨论】:

  • 不错的标题。如果你没有明显地颤抖,那么你就没有认真对待这一点。获取一些武器。
  • 这让我害怕,甚至不是我的警告
  • 谁说,“如果你不担心,你就不了解情况”或者......“你没有注意”?

标签: c# app-config devart dotconnect


【解决方案1】:

绑定记录会将绑定部分添加到您的 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 复制到解决方案的文件夹中,并让您的所有项目都指向该文件夹

【讨论】:

    【解决方案2】:

    是的,你应该担心。您有两个程序集(例如 MyAssembly1 和 MyAssembly2)引用相同的程序集(例如 MySharedAssembly),但版本不同。只有一个版本的 MySharedAssembly 可以加载和使用您的应用程序,因此 MyAssembly1 和 MyAssembly2 需要正确使用它。

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

    如果您将重定向添加到您的配置中,您基本上是在说任何尝试加载旧版本的 MySharedAssembly 的程序集都应该使用新版本。因此,如果 MySharedAssembly 是向后兼容的,那么您当然可以侥幸逃脱。但它要求您的应用程序有一个配置文件。

    最好的办法是找到引用共享程序集的程序集,看看是否有使用最新和最好版本的更新。

    【讨论】:

    • 有没有办法找出哪个程序集被多个其他程序集引用?我在这个解决方案中只有一个项目,所以我不知道这是如何/为什么会发生的。
    • @ClayShannon - 如果你在 Reflector 中加载你的程序集,那么它将告诉你每个程序集引用的内容。见stackoverflow.com/questions/1455594/…
    • 我不知道是哪个程序集导致了问题 - 错误消息非常模糊。
    • 警告信息,即(not err msg)
    • 似乎 log4net 是主题;一旦我更新了一些文件,一切都很好,所以我的猜测是一个引用了 log4net 的一个版本,另一个引用了 log4net 的另一个版本。
    猜你喜欢
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多