【发布时间】: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 版本。
有什么想法可以明确告诉编译器使用 Color 和 Vector2 类的 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