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

标签 c# .net uwp codenameone ikvm

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

(从错误列表窗口)

Cannot find type System.ApplicationException in module CommonLanguageRuntimeLibrary

(从输出窗口)

Program Files (x86)\MSBuild\Microsoft\WindowsXaml\v14.0\8.2\Microsoft.Windows.UI.Xaml.Common.targets(352,5): Xaml Internal Error error WMC9999: Cannot find type System.ApplicationException in module CommonLanguageRuntimeLibrary.

根据我的阅读,System.ApplicationException 在 .Net 中针对 UWP 已贬值,您应该只使用 System.Exception

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

提前致谢。

最佳答案

我们的 IKVM 端口不是完全交 key 的。 IKVM 是使用 .Net 2.0 编译的,并且使用需要包含在使用它的 UWP 项目中的接口(interface)分解出一些东西(例如反射东西、一些日期东西、线程等)。

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

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

  1. RuntimeReflectionHelper。
  2. NativeThreadHelper

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

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

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

关于c# - 在模块 CommonLanguageRuntimeLibrary 中找不到类型 System.ApplicationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39683977/

相关文章:

c# - 数据集与空值的比较c#

c# - Azure Functions - C# - 运行外部应用程序?

C#字节加法操作

c# - 从命令行运行 ASP.NET Web 应用程序

c# - UWP Windows 10 应用程序内存在导航时增加

c# - 刷新 DB First EDMX 时如何保留 StoreGeneratedPattern 设置?

c# - asp.net mvc 5 DropDownList nullable int default option not null

c# - 更新对象上下文时出错

c# - 在 Windows 隐私设置中找不到 UWP 应用

c# - 如何访问以编程方式创建的 Flyout 的所有者?