【问题标题】:Ambiguous reference between MonoGame & Microsoft.XNA.Framework namespacesMonoGame 和 Microsoft.XNA.Framework 命名空间之间的模糊引用
【发布时间】:2023-03-10 20:02:01
【问题描述】:

MonoGame(一个基本上将 XNA 引入 Windows Phone 8 的框架)的所有命名空间都以 Microsoft.Xna.Framework 为前缀,我相信可以最大限度地减少将 XNA 应用程序移植到 MonoGame 时所需的代码更改量。

我的问题是,我希望访问 Microphone 类,因为尚未在 MonoGame 中创建,我必须在官方 Microsoft XNA 类中使用它,这需要取出显式强制删除在 .csproj 中的标准 Microsoft.XNA.Framework.dll 引用中,我的 MonoGame 模板已设置为避免冲突,效果很好,现在 Microphone 可以访问,但这样做我在 Microsoft 中都存在的几个关键类之间产生了歧义标准问题和 MonoGame。

我收到的错误是:

不明确的参考:
Microsoft.Xna.Framework.Color
Microsoft.Xna.Framework.Color

这显然已经发生,因为除了标准的 Microsoft 发布的 XNA 库之外,我还引用了 MonoGame.Framework.dll,它占用了命名空间,从而产生了这种歧义。但是,在所有情况下,我都希望访问 MonoGame 版本。

有什么想法可以明确告诉编译器使用 ColorVector2 类的 MonoGame 版本,而不是微软官方版本?

using Color = Microsoft.Xna.Framework 中的任何尝试显然都行不通,因为它们在编译的 dll 中都被标记为相同!

【问题讨论】:

  • 如果命名空间相同,那么您似乎必须重新编译 MonoGame 以使用不同的命名空间。唯一的另一种选择是为您想要使用的少数方法创建一个包装器。确保您明确说明了在这个新类中实际要使用的引用。我还要提醒您注意使用 XNA,因为微软基本上已经停止了它的开发。
  • 谢谢,我会考虑一个包装器……只是希望有更优雅的东西。
  • 您想同时使用这两个引用,并且它们都共享完全相同的命名空间,问题在于 MonoGame 没有一个优雅的解决方案。当然,我严重怀疑完整的命名空间是 Microsoft.Xna.Framework.Color,你必须查看代码才能确定它实际上是什么。
  • @Ramhound 呃...有一个更好的解决方案 - 请参阅我的答案。 XNA/MonoGame 也是一个合理的技术选择。而Microsoft.Xna.Framework.Color 真的Color 的完整命名空间和类名。
  • Re MonoGame:这是一个深思熟虑且合理的选择。它被设计为与 XNA 兼容的源代码。您使用您的 XNA 源,切换程序集引用,它应该“正常工作”。 (当然,直到他们真正完成它 - Microphone 和所有 - 它并不总是那样工作。)有条件地更改 using 语句是一场噩梦 - 这就是你必须做的很早的时候,他们改变了它。 (关于 XNA:也许是真的,但 MonoGame+XNA 是与“仅”XNA 不同的选择。)

标签: c# xna windows-phone-8 monogame


【解决方案1】:

解决这个特定问题的方法是使用extern aliasMSDNtutorial)。

这样,您可以为 Microsoft XNA DLL 设置别名,并为 Microphone 类指定适当的 using 语句。继续正常使用 MonoGame。

更好的解决方案可能是使用这种技术在命名空间Microsoft.Xna.Framework.Audio 中创建自己的包装类Microphone。把它放在一个单独的程序集中,这样你就不必用extern alias 东西污染你的主要源代码。

当然,理想的方式是为 MonoGame 实际实现 Microphone 并贡献它;)

(当然,这个答案并没有说明您在以这种方式混合 MonoGame 和 XNA 方面可能取得多大的成功,功能方面。希望它有效。)

【讨论】:

  • 嘿 Andrew,感谢您的回答和 G/C 的问候 :) 离您只有大约一个小时的路程.... ;) 我回家后会给 extern alias 一个机会,谢谢.
  • 啊……你是“黑暗”甜美的作者 :) 我觉得你的名字听起来很熟悉……
  • 太棒了!我发现 extern 别名是最好的方法,我现在声明了以下内容,虽然很冗长,但我更喜欢维护一个包装库:MonoGameFramework::Microsoft.Xna.Framework.GraphicsDeviceManager graphics; MonoGameFramework::Microsoft.Xna.Framework.Graphics.SpriteBatch spriteBatch; private MonoGameFramework::Microsoft.Xna.Framework.Graphics.SpriteFont spriteFont; private Microphone mic = Microphone.Default; 这使我能够利用由提供的标准 Microsoft.XNA.Framework 类WP8 和 MonoGame 的,再次感谢您的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-21
  • 1970-01-01
  • 2011-06-26
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多