Spring CodeConfig ScanAllAssemblies抛出ReflectionTypeLoadException

时间:2011-04-08 10:27:04

标签: c# spring.net spring.codeconfig

我正在尝试新的Spring CodeConfig for .NET,但是遇到了很多麻烦。

我将NuGet包Spring.CodeConfig安装到现有的.NET 4项目中,但除此之外没有任何问题。

运行此代码时,ScanAllAssemblies方法抛出ReflectionTypeLoadException:

var context = new CodeConfigApplicationContext();
context.ScanAllAssemblies();
context.Refresh();

即使我没有定义配置类,也会发生这种情况,但如果我创建配置类,也会发生这种情况。

LoaderExceptions属性包含一条带有此消息的异常:

  

无法加载文件或程序集'System,Version = 1.0.3300.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'或其依赖项之一。指针无效(来自HRESULT的异常:0x80004003(E_POINTER))

我尝试将系统版本1.0.3300.0的程序集重定向添加到版本4.0.0.0,这是我项目中引用的版本,但这不起作用。

如何解决此问题?


根据要求,以下是相关项目的参考资料:

  • mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089
  • Ploeh.Samples.MenuModel,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null
  • Spring.Aop,Version = 1.3.1.40711,Culture = neutral,PublicKeyToken = 65e474d141e25e07
  • Spring.Core,Version = 1.3.1.20711,Culture = neutral,PublicKeyToken = 65e474d141e25e07
  • Spring.Core,Version = 1.3.1.40711,Culture = neutral,PublicKeyToken = 65e474d141e25e07
  • Spring.Core.Configuration,Version = 1.0.0.4111,Culture = neutral,PublicKeyToken = 65e474d141e25e07
  • System,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089
  • System.Core,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089
  • System.Xml,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089
  • System.Xml.Linq,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089
  • xunit,Version = 1.7.0.1540,Culture = neutral,PublicKeyToken = 8d05b1bb7a6fdb6c

由于第二个引用是项目引用,我还列出了它的依赖项:

  • mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089
  • System.Core,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089

我的App.config中也有这些绑定重定向 - 如果重要的话:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Spring.Core" publicKeyToken="65e474d141e25e07" culture="neutral" />
    <bindingRedirect oldVersion="1.3.1.20711" newVersion="1.3.1.40711" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System" publicKeyToken="b77a5c561934e089" culture="neutral" />
    <bindingRedirect oldVersion="1.0.3300.0" newVersion="4.0.0.0" />
  </dependentAssembly>
</assemblyBinding>

但是,两者都试图修复CodeConfig的问题。删除它们没有帮助...

1 个答案:

答案 0 :(得分:4)

经过一番调查后,我们已将此问题确定为4.0 CLR下的ReflectionOnlyLoad API问题。

CodeConfig程序集扫描在2.0 CLR下工作,但显然尽管.NET 3.5和.NET 4.0之间的ReflectionOnlyLoad API没有明显的变化,但是ReflectionOnlyLoad处理依赖程序集的方式似乎存在行为差异(或者更准确地说,我们以编程方式解析.NET 4.0下的ReflectionOnlyLoad API的类型。

Spring.NET团队正在开发CodeConfig(1.0.1)的快速更新版本,该版本应正确解决此问题并允许其在.NET 4.0下成功使用。感谢您引起我们的注意!