SimpleITK Windows Universal App - 不在发布中构建,调试中的奇怪行为和 TypeLoadException

SimpleITK Windows Universal App - does not build in release, strange behaviour in debugging and TypeLoadException

TL;DR 版本:Could not load type 'System.Runtime.InteropServices.HandleRef 尝试在通用 Windows 应用程序上使用 SimpleITK 时

所以,现在我必须使用 SimpleITK 制作简单的学校项目,而且,我对新的通用 Windows 应用程序很感兴趣。我正在使用 Visual Studio 2015 Enterprise。

因此,我创建了一个示例项目,添加了对 SimpleITKManaged 的​​引用,将 SimpleITKNative 复制并粘贴到 obj/Debug 目录并尝试做一些教程。但是,我了解到将两种新技术混合在一起可能不是一个好主意。

我使用的 ITK 库似乎不适用于通用 Windows 应用程序。将此代码段放在代码中的任何位置后,我无法调试该方法。代码未在方法开始时遇到断点。里面的内容并不重要,因为来自 SimpleITK 的任何类型都会导致代码失败。

private void TestMethod()
{//breakpoint here
    ImageFileReader reader = new ImageFileReader();
    reader.SetFileName(FileName);
    var image = reader.Execute();
}

似乎在代码到达方法之前抛出异常,可能在 XAML 级别。我首先尝试将调用实现为 ICommand,然后在后面的代码中实现为事件处理程序,没有任何区别。例外也不是很有帮助:

 Could not load type 'System.Runtime.InteropServices.HandleRef' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e'.

StackTrace 也不是:

at Pomwjo.Universal.MainPage.ButtonBase_OnClick(Object sender, RoutedEventArgs e)

相同的库在 WPF 中运行良好。我尝试了 x64 和 x86 库,但都遇到了同样的问题。构建目标和库架构匹配。我正在使用 SimpleITK C# x86 包装器 0.9.0,使用 .NET v2.0.50727 编译,使用 ITK 4.7.2。我从 Sourceforge 中预先构建了它们。就在这之后,我发现了一个0.9.1版本,我下载并尝试使用它,但没有用。

下一步是 好的,我是专业程序员 - 我会自己构建它!。我将不再描述构建一个巨大的库是什么,我们只是说它也不起作用。

有什么想法,如何解决这个问题?

编辑 1 我刚刚意识到,如果代码无法访问,它不会抱怨。好吧,至少这是按预期工作的。但是,更奇怪的是,这个片段只有在满足条件时才会失败:

  if (new Random().Next(1, 10)%2 == 0)
       WrapperMethod(); //inside is snippet from above.
  else  return;

此外,在发布时构建时,出现此错误:

1>C:\Program Files (x86)\MSBuild\Microsoft\.NetNative\x64\ilc\IlcInternals.targets(791,7): error : MCG0024: MCG0024:UnresolvableTypeReference Unresolvable type reference 'System.Runtime.InteropServices.HandleRef' in 'Assembly(Name=mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)' found. Check the references in your build system. A reference is either missing or an assembly is missing an expected type.

第一次写这个问题时,不可能在 Universal Apps 中使用 simpleITK,因为它缺少工作所需的一些 类 - 包括 System.Runtime.InteropServices.HandleRef.

此外,因为所有应用程序都 运行 在沙箱中,我的猜测(受过教育,但仍然猜测)是完全不可能使用 SimpleITK 使用的本机 C++ 代码。 This link 描述了一种将本机代码导入应用程序的方法,但是这需要对 ITK 库本身进行大量修改——这不是我项目中的重点。