我正在尝试新的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,这是我项目中引用的版本,但这不起作用。
如何解决此问题?
根据要求,以下是相关项目的参考资料:
由于第二个引用是项目引用,我还列出了它的依赖项:
我的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的问题。删除它们没有帮助...
答案 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下成功使用。感谢您引起我们的注意!