找不到系统类型.CommonLanguageRuntimeLibrary模块中的ApplicationException

本文关键字:ApplicationException 模块 CommonLanguageRuntimeLibrary 系统 类型 找不到 | 更新日期: 2023-09-27 18:08:35

我通过CodenameOne的IKVM版本运行了一个第三方Android库,并成功导入了输出的。dll作为我在Visual Studio中的UWP应用程序的参考。在尝试编译项目时,我得到一个构建错误:

(从错误列表窗口)

找不到系统类型。模块CommonLanguageRuntimeLibrary中的ApplicationException

(从输出窗口)

Program Files (x86)'MSBuild'Microsoft'WindowsXaml'v14.0'8.2'Microsoft. windows . ui .Xaml. common .targets(35,5): Xaml内部错误错误WMC9999:无法找到类型System。模块CommonLanguageRuntimeLibrary中的ApplicationException .

从我读到的System.ApplicationException在。net中对UWP贬值了,相反,你应该只使用System.Exception

我不知道如何解决和/或纠正这个问题,因为它来自一个库而不是我自己的代码。

找不到系统类型.CommonLanguageRuntimeLibrary模块中的ApplicationException

我们的IKVM端口并不是完全交钥匙的。IKVM是用。net 2.0编译的,有些东西(比如反射的东西,一些日期的东西,线程,等等)是用接口分解出来的,这些接口需要包含在使用它的UWP项目中。

如果你还没有实现这些接口,或者你正在使用我们不需要CN1的代码路径,那么你可能会开始使用部分JDK或IKVM运行时使用。net 2.0类(例如此例外)。

目前在你的UWP项目中只有两个接口需要实现:

  1. RuntimeReflectionHelper。
  2. NativeThreadHelper

你可以看到,在CN1端口它们是如何初始化的

下面是RuntimeReflectionHelper和NativeThreadHelper的实现

在UWP项目中实现这些绕过了IKVM是为。net 2.0编译的事实,因此这些实现可以直接使用UWP api。

即使这样,您也可能会遇到问题。IKVM的这个端口是沿着CN1端口发展的,它实际上只针对我们的用例进行了测试。如果CN1不需要某些常用方法,则可能未实现。

您应该注意的其他一些限制:

  1. 项目中ikvm编译的代码需要成为单个.dll文件的一部分,如果您希望它们相互引用。例如,如果你将lib1.jar和lib2.jar两个库编译为lib1.dll和lib2.dll,那么lib1中的代码不能引用lib2中的类,反之亦然。在CN1中,我在通过IKVM运行之前将所有.class文件捆绑到一个.jar中,因此这对我们来说不是问题(因此我没有花太多时间试图修复它)。

  2. 如果你的目标是发布到Windows商店,目前在他们的DotNetNative工具链中有一个bug,导致它在包括try/catch块的同步方法上阻塞。微软可能会在未来的版本中修复这个问题,但我通过在所有类上运行预转换,将所有这些方法转换为本机工具链可以接受的形式来解决这个问题。下面是ANT任务中应用此预处理的部分。下面是ANT任务的类预处理器项目,用于执行实际的预处理。

正如我之前所说的,如果你在已经开辟的道路之外探索,预计会遇到困难。

相关文章:
  • 没有找到相关文章