在MonoGame &Microsoft.XNA.Framework名称空间

本文关键字:空间 Framework XNA MonoGame Microsoft | 更新日期: 2023-09-27 18:02:13

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

我的问题是,我希望访问Microphone类,其中,因为还没有在MonoGame中创建,我必须从微软官方XNA类中使用它,这需要在.csproj中明确强制删除标准Microsoft.XNA.Framework.dll引用,我的MonoGame模板已经设置以避免冲突,它工作得很好,现在Microphone是可访问的,但是在这样做的时候,我在Microsoft standard issue和MonoGame中存在的几个关键类之间造成了歧义。

我收到的错误是:

歧义引用:
Microsoft.Xna.Framework.Color
Microsoft.Xna.Framework.Color

这显然已经发生了,因为除了标准的microsoft发布的XNA库之外,我还有一个对MonoGame.Framework.dll的引用,它占用了名称空间,造成了这种模糊性。然而,在所有情况下,我都希望访问一夫一妻制版本。

任何想法我如何可以明确地告诉编译器使用ColorVector2类的一夫一妻制版本,而不是官方的微软一个?

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

在MonoGame &Microsoft.XNA.Framework名称空间

解决这个特定问题的方法是使用extern alias (MSDN, tutorial)。

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

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

理想的方法,当然,是实际实现Microphone的一夫一妻制,并贡献它;)

当然,这个答案并不能说明你以这种方式将《一夫一妻制》和《XNA》结合在一起会有多成功。