【发布时间】: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