Caliburn.Micro在.net 4.0上引发错误,但适用于.net 4.6.1

时间:2017-11-27 22:55:32

标签: c# .net wpf caliburn.micro

我手上的情况非常奇怪。首先,这是我的第一个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机器上的Web安装的.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上出现以下错误?

enter image description here

1 个答案:

答案 0 :(得分:0)

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

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

真正的问题是我在没有KB246871

的情况下使用Microsoft.Bcl.Async

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