【问题标题】:How can I overcome Windows Component limitation to windows runtime types?如何克服 Windows 组件对 Windows 运行时类型的限制?
【发布时间】:2013-03-01 21:42:25
【问题描述】:

我有一个使用后台任务的 Windows 应用商店应用程序。后台任务存储在 Windows 运行时组件项目中。 (这种结构似乎是使后台任务工作的唯一方法。)

在后台任务项目中,我有一些外部可见的公共方法,它们的返回/参数类型是我自己的类而不是 Windows 运行时类。

例如:

public MyClass DoSomething()
{
    return null;
}

在构建时,我收到与这些方法相关的以下错误:

方法“X”返回“Y”,它不是有效的 Windows 运行时类型。暴露给 Windows 运行时的方法必须只返回 Windows 运行时类型。

方法“T”具有“W”类型的参数“U”。 “W”不是有效的 Windows 运行时参数类型。

我可以理解错误在说什么,但我还没有想出一个好的方法来构建我的代码以满足这些要求。

以下是我已经考虑过的一些事情:

  1. 将后台任务项目更改为 Windows 应用商店类库项目。这允许在方法签名中使用非 Windows 运行时类型,但不再启动后台任务。
  2. 使用可移植类库。这不起作用,因为它无权访问 Windows 运行时。
  3. 对于值类型,我可以将它们分解为Tuples 或多个参数,但这看起来很混乱,结构较少且不易维护。我强烈反对这种类型的编程。
  4. 对于类,似乎我可能不得不在两个应用程序中复制它们的逻辑。这是一个巨大的可维护性问题。

【问题讨论】:

  • 您没有向我们展示这些方法的外观,从而使这个问题变得不必要地难以回答。自定义类型需要构建代理,请查看this answer
  • @HansPassant:谢谢!我已经编辑了问题以使其更清晰。
  • 我还是看不出这些方法长什么样。
  • @HansPassant,我为你添加了一个简单的例子。

标签: c# windows-8 windows-store-apps


【解决方案1】:

我能够通过隔离 Windows 组件项目中的后台任务并将可重用的 Windows 运行时相关代码移动到 Windows 应用商店类库项目中来完成这项工作。

【讨论】:

  • 感谢分享这个解决方案,它完全适用于我的情况。我会自动生成一些公共的协议缓冲区文件并默认返回自定义类型,因此编译器会抱怨它。在类库中隔离这些生成的类完全解决了这个问题
猜你喜欢
  • 1970-01-01
  • 2018-06-06
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 2013-01-22
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
相关资源
最近更新 更多