满足 ImportsOnce ObjectDisposedException
SatisfyImportsOnce ObjectDisposedException
堆栈跟踪:
System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'System.ComponentModel.Composition.ReflectionModel.DisposableReflectionComposablePart'.
at System.ComponentModel.Composition.ReflectionModel.DisposableReflectionComposablePart.EnsureRunning()
at System.ComponentModel.Composition.ReflectionModel.ReflectionComposablePart.System.ComponentModel.Composition.Primitives.ICompositionElement.get_Origin()
at System.ComponentModel.Composition.CompositionException.WriteElementGraph(StringBuilder writer, ICompositionElement element)
at System.ComponentModel.Composition.CompositionException.WriteError(StringBuilder writer, CompositionError error)
at System.ComponentModel.Composition.CompositionException.WritePath(StringBuilder writer, IEnumerable`1 path, Int32 ordinal)
at System.ComponentModel.Composition.CompositionException.WritePaths(StringBuilder writer, IEnumerable`1 paths)
at System.ComponentModel.Composition.CompositionException.BuildDefaultMessage()
at System.ComponentModel.Composition.CompositionException.get_Message()
从 MSDN 文档中,我可以看到它在处理容器时会出现异常,但它从未 .Dispose()
过。
我正在使用它来导入实际的表单以增加破解尝试的额外安全性。
它仅发生在用户的 Windows 服务器 2008 (不知道是否为 r2)(已确认为 R2)
它已被证明可以在其他用户 Server 2008 系统 (RDP) 上使用相同的代码。
AggregateCatalog aggregateCatalog = new AggregateCatalog();
aggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(Program).Assembly));
CompositionContainer _container = new CompositionContainer(aggregateCatalog, true);
_container.ComposeExportedValue<ExportProvider>(_container);
_container.ComposeExportedValue(_container);
_container.ComposeExportedValue<ICompositionService>(_container);
Program program = new Program();
_container.SatisfyImportsOnce(program);
program._Run();
_container.Dispose();
上面的代码正是我 运行 我可以确认它发生在 SatisfyImportsOnce 而不是 _Run(); (需要导入)
编辑这仍然发生,我从一个遇到错误的用户那里得到了 mdmp 文件,这次是 Windows 7 SP1 上的用户和另一个 Windows 10 Latest 上的用户。 :/
这个古老的错误已经修复!
原因是...损坏的注册表项。
哈哈。
解决方法如下:
在 CMD 中,输入 lodctr /r
这是一个与性能计数器类似的错误,它们都有完全相同的修复。
我通过查看异常数据发现了这一点,我查看了所有数据,如 TargetSite、Source、Message e.t.c,在某处它说了以下内容:
Indikatornamensdaten können nicht geladen werden, da ein ungültiger Index "" aus der Registrierung gelesen wurde.
这简单地表示注册表中的索引是 empty/missing。做了一些研究,我之前遇到过的性能计数器也出现了同样的错误。所以我应用了相同的修复程序,这就像变魔术一样。
:) 享受每个人都为这个错误撕扯头发!祝你好运!
堆栈跟踪:
System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'System.ComponentModel.Composition.ReflectionModel.DisposableReflectionComposablePart'.
at System.ComponentModel.Composition.ReflectionModel.DisposableReflectionComposablePart.EnsureRunning()
at System.ComponentModel.Composition.ReflectionModel.ReflectionComposablePart.System.ComponentModel.Composition.Primitives.ICompositionElement.get_Origin()
at System.ComponentModel.Composition.CompositionException.WriteElementGraph(StringBuilder writer, ICompositionElement element)
at System.ComponentModel.Composition.CompositionException.WriteError(StringBuilder writer, CompositionError error)
at System.ComponentModel.Composition.CompositionException.WritePath(StringBuilder writer, IEnumerable`1 path, Int32 ordinal)
at System.ComponentModel.Composition.CompositionException.WritePaths(StringBuilder writer, IEnumerable`1 paths)
at System.ComponentModel.Composition.CompositionException.BuildDefaultMessage()
at System.ComponentModel.Composition.CompositionException.get_Message()
从 MSDN 文档中,我可以看到它在处理容器时会出现异常,但它从未 .Dispose()
过。
我正在使用它来导入实际的表单以增加破解尝试的额外安全性。
它仅发生在用户的 Windows 服务器 2008 (不知道是否为 r2)(已确认为 R2)
它已被证明可以在其他用户 Server 2008 系统 (RDP) 上使用相同的代码。
AggregateCatalog aggregateCatalog = new AggregateCatalog();
aggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(Program).Assembly));
CompositionContainer _container = new CompositionContainer(aggregateCatalog, true);
_container.ComposeExportedValue<ExportProvider>(_container);
_container.ComposeExportedValue(_container);
_container.ComposeExportedValue<ICompositionService>(_container);
Program program = new Program();
_container.SatisfyImportsOnce(program);
program._Run();
_container.Dispose();
上面的代码正是我 运行 我可以确认它发生在 SatisfyImportsOnce 而不是 _Run(); (需要导入)
编辑这仍然发生,我从一个遇到错误的用户那里得到了 mdmp 文件,这次是 Windows 7 SP1 上的用户和另一个 Windows 10 Latest 上的用户。 :/
这个古老的错误已经修复!
原因是...损坏的注册表项。
哈哈。
解决方法如下:
在 CMD 中,输入 lodctr /r
这是一个与性能计数器类似的错误,它们都有完全相同的修复。
我通过查看异常数据发现了这一点,我查看了所有数据,如 TargetSite、Source、Message e.t.c,在某处它说了以下内容:
Indikatornamensdaten können nicht geladen werden, da ein ungültiger Index "" aus der Registrierung gelesen wurde.
这简单地表示注册表中的索引是 empty/missing。做了一些研究,我之前遇到过的性能计数器也出现了同样的错误。所以我应用了相同的修复程序,这就像变魔术一样。
:) 享受每个人都为这个错误撕扯头发!祝你好运!