【问题标题】:Caliburn.Micro Throws an error on .net 4.0 but works on .net 4.6.1Caliburn.Micro 在 .net 4.0 上引发错误,但在 .net 4.6.1 上有效
【发布时间】:2017-11-27 22:55:32
【问题描述】:

我手头有一个非常奇怪的情况。首先,这是我的第一个 Caliburn.Micro 项目。

该项目使用的是 Caliburn.Micro 3.1.0,它的目标是 .net 4.0。问题是该应用程序在具有 4.6.1 但不能仅与 .net 4.0 一起使用的系统上运行良好。

我尝试安装所有可用的 Caliburn.Micro 版本,但问题仍然存在。我可以调试应用程序的唯一方法是通过各种 Thread.Sleeps 或 MessageBoxes。最后,对于上述位于 Bootstrapper 中的代码,我发现了两个系统之间的主要区别:

     protected override object GetInstance(Type serviceType, string key)
    {
        MessageBox.Show(container.Catalog.Parts.ToString());
        MessageBox.Show(container.Catalog.Parts.Count().ToString());
        MessageBox.Show("3rd message.");

        var contract = string.IsNullOrEmpty(key) ? AttributedModelServices.GetContractName(serviceType) : key;

        var exports = container.GetExportedValues<object>(contract);

        if (exports.Any())
            return exports.First();
        throw new Exception(string.Format("Could not locate any instances of contract {0}.", contract));
    }

在使用 4.6.1 的机器上,我看到所有消息框,第一条消息解析为

System.ComponentModel.Composition.Hosting.AggregateCatalog

但在仅运行 4.0 的机器上,我只能看到解析为的第一条消息

System.ComponentModel.Composition.Hosting.ComposablePartCatalogCollection.SelectMany(catalog => catalog.Parts)

因此,从 Windows 7 机器上的网络安装的 .net 4.0 中的 System.ComponentModel.Composition 与 Windows 10 附带的 .net 4.0 之间似乎存在差异。但是我在开发机器上使用的文件我的 Windows 7 .net 4.0 机器上的那个具有相同的版本 4.0.30319.1。所以文件必须相同。

在这一点上,我被困住了。为什么应用程序在 4.6.1 上运行,但在 .net 4.0 上出现以下错误?

【问题讨论】:

  • 崩溃似乎是由.NET Framework 2.x/3.x的一部分CLR20r3引起的。

标签: c# .net wpf caliburn.micro


【解决方案1】:

问题出在所引用的项目之一中。该项目是 .net 4.5,但在将其更改为 .net 4.0 后,包 System.Net.Http 4.0.0 仍然存在。删除后一切正常。

作为将来的说明,我建议重新安装所有 NuGet 包并重新编译解决方案中的所有项目。

真正的问题是我使用的 Microsoft.Bcl.Async 没有 KB246871

此时我不知道是否应该删除问题和答案。

【讨论】:

  • 对刚开始使用CM的会员有帮助,对使用CM多年的人也有帮助,所以不,不要删除它。
猜你喜欢
  • 2018-04-27
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
  • 2014-07-10
  • 1970-01-01
  • 2020-02-04
  • 2013-08-19
  • 1970-01-01
相关资源
最近更新 更多