我手上的情况非常奇怪。首先,这是我的第一个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上出现以下错误?
答案 0 :(得分:0)
问题出在其中一个被引用的项目中。该项目是.net 4.5,但在将其更改为.net 4.0之后,System.Net.Http 4.0.0软件包仍然存在。删除后,一切正常。
作为未来的说明,我建议重新安装所有NuGet包并重新编译解决方案中的所有项目。
真正的问题是我在没有KB246871
的情况下使用Microsoft.Bcl.Async此时我不知道是否应该删除问题和答案。