System.TypeLoadException
本文关键字:TypeLoadException System | 更新日期: 2023-09-27 18:01:46
我在WPF应用程序中收到以下错误:
Declaration referenced in a method implementation cannot be a final method.
我发现的唯一问题是一个非虚拟方法被覆盖了,但我检查了,在我的对象中找不到任何。
编译时不会抛出错误,只有在调试时才会抛出。
有人建议我试试吗?
——更新
我得到错误在我的App.Xaml.cs OnStartup
覆盖时调用:
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new DirectoryCatalog(localDir));
_container = new CompositionContainer(catalog);
在_container上,我收到15 LoaderException升级到CSLA 4.5.10后。
好的,我找到了我的问题。我希望把它贴在这里可以帮助别人找到我一直在寻找这么长时间的问题。
在我上面发布的代码中,localDir指向我本地机器上的一个目录,其中构建了项目,然后用MEF获取。对我来说,这里的问题是,有一个。dll到一个不同的项目,仍然引用旧版本的CSLA和Save()
,仍然被覆盖,尽管它不再被允许了。
所以简而言之,它是一个。dll不匹配在我的MEF目录,所以一定要检查类似的东西。
希望这能帮助到一些人!
这也发生在我身上,我正在运行我的测试,并得到相同的错误消息。
问题是我在其中一个项目中有一个更新的nuget包,而在测试项目中该nuget包已经过时,因此产生了这个问题。
更新所有项目的包修复了这个问题
这通常是由于DLL契约不匹配造成的。在DLL A中有一个方法
public void MyTestMethod() {}
但是在DLL B中有:
public virtual void MyTestMethod() {}
现在,如果应用程序中有覆盖方法的代码:
public override void MyTestMethod() {}
现在你的应用程序引用DLL B,但是一个单独的项目依赖引用DLL a。
这可以通过在项目之间合并dll或nuget包来修复,以便底层代码相同