wpf System.TypeLoadException

zzlelutf  于 2023-04-07  发布在  其他
关注(0)|答案(3)|浏览(90)

我在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);

在升级到CSLA 4.5.10后,在_container上我收到15 LoaderException。

lymnna71

lymnna711#

好的,我已经找到了我的问题。我希望把它贴在这里可能会帮助别人找到我一直在寻找这么久的问题。
在我上面发布的代码中,localDir指向我本地机器上的一个目录,在那里构建项目,然后用MEF获取。这里的问题是,有一个.dll到一个不同的项目,仍然引用旧版本的CSLA,还有Save(),仍然被覆盖,尽管它是不允许的。
所以简而言之,它是我的MEF目录中的.dll不匹配,所以一定要检查类似的东西。
希望这对某人有帮助!

gg58donl

gg58donl2#

这也发生在我身上,我正在运行我的测试,并得到相同的错误信息。
问题是,我在其中一个项目中有一个更新的nuget包,而在测试项目中,nuget包已经过时,因此产生了这个问题。
更新所有项目中的包解决了这个问题。

a6b3iqyw

a6b3iqyw3#

这通常是由于DLL协定不匹配而发生的。

public void MyTestMethod() {}

但在DLL B中,您有:

public virtual void MyTestMethod() {}

现在它的应用程序,你有代码覆盖的方法:

public override void MyTestMethod() {}

现在,您的应用程序正在引用DLL B,但是一个单独的项目依赖项引用DLL A。
这可以通过合并项目之间的DLL或Nuget包来修复,以便底层代码相同

相关问题