繁体   English   中英

在 CommonLanguageRuntimeLibrary 模块中找不到 System.ApplicationException 类型

[英]Cannot find type System.ApplicationException in module CommonLanguageRuntimeLibrary

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

(从错误列表窗口)

在 CommonLanguageRuntimeLibrary 模块中找不到 System.ApplicationException 类型

(从输出窗口)

Program Files (x86)\\MSBuild\\Microsoft\\WindowsXaml\\v14.0\\8.2\\Microsoft.Windows.UI.Xaml.Common.targets(352,5):Xaml 内部错误错误 WMC9999:在 CommonLanguageRuntimeLibrary 模块中找不到类型 System.ApplicationException .

从我读到的System.ApplicationException在 .Net 中为 UWP 折旧,而您应该只使用System.Exception

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

提前致谢。

我们的 IKVM 端口并不是一成不变的。 IKVM 是使用 .Net 2.0 编译的,并且使用需要包含在使用它的 UWP 项目中的接口来分解某些内容(例如反射内容、某些日期内容、线程等)。

如果您还没有实现这些接口,或者您正在使用 CN1 不需要的代码路径,那么您可能正在着手使用 .Net 2.0 类的部分 JDK 或 IKVM 运行时(例如这个例外)。

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

  1. 运行时反射助手。
  2. 本地线程助手

您可以看到,在 CN1 端口中,它们是如何在这里初始化的

下面是RuntimeReflectionHelperNativeThreadHelper 的实现

在 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 工具链中目前存在一个错误,导致它在包含 try/catch 块的同步方法上窒息。 这可能会在未来的版本中由 Microsoft 修复,但我通过对所有类运行预转换来解决这个问题,以将所有此类方法转换为它们的本机工具链可接受的形式。 是我们 ANT 任务中应用此预处理的部分。 是用于执行实际预处理的 ANT 任务的类预处理器项目。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM