【问题标题】:System.Windows.Interactivity.dll loaded twiceSystem.Windows.Interactivity.dll 加载了两次
【发布时间】:2017-07-10 03:24:12
【问题描述】:

我在我的应用程序 System.Windows.Interactivity.dll 中使用。我的应用程序的 Program Files 文件夹中有特定版本 (3.0.40218.0)。 这是负责加载它的代码: xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"。 当用户在 GAC_MSIL 中加载了此 dll 的另一个版本时,就会出现问题。然后由于某种原因,这个 dll 的两个版本都被加载导致崩溃。有什么办法可以选择要加载的特定版本吗?

【问题讨论】:

  • 为什么应用的 Program Files 文件夹中有特定版本?
  • 您可以在app.config 中使用Assembly Redirection 来覆盖版本。
  • @LeiYang System.Windows.Interactivity 是 Blend SDK 的一部分。它还能如何与应用程序一起提供?
  • @BradleyUffner 我试过了,但问题是它实际上是 C++ 应用程序的 C# dll,它并不能真正与 app.config 一起使用

标签: c# .net wpf dll


【解决方案1】:

有什么方法可以选择要加载的特定版本吗?

不,XAML 解析器将阻止您使用同一程序集的多个版本,并且尝试将程序集的版本号添加到 XAML 中的命名空间声明将无效。

它是决定 XAML 解析器实际加载哪个程序集的引用。如果您查看项目文件 (.csproj),您应该能够看到您引用了哪个版本的程序集。

【讨论】:

  • 感谢您的回答,我想通了。无论如何,尽管选择了某些特定版本,但似乎很有趣,但在未找到时加载了较新的版本。对我来说似乎是一个错误。
【解决方案2】:

看来我找到了问题所在。我认为这可能是 .NET 中的错误。在“参考”中,我有旧版本的文件(对于 .NET 4.0)。如果它被缓存了,它当然会被加载,但由于某种原因,我的应用程序的 Program Files 文件夹中存在的新 dll(用于 .NET 4.5)也被缓存在 GAC_MSIL 中并被加载。所以我的结论是它意外地只在新版本存在的情况下工作。希望它可以帮助有类似问题的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 2022-12-24
    • 2012-06-01
    • 2014-11-24
    • 1970-01-01
    • 2017-06-20
    相关资源
    最近更新 更多