MonoGame和Microsoft.XNA.Framework名称空间之间的模糊引用

MonoGame(一个基本上将XNA引入Windows Phone 8的框架)具有以Microsoft.Xna.Framework为前缀的所有名称空间。我相信最小化将XNA应用程序移植到MonoGame时所需的代码更改量。

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

我收到的错误是:

含糊不清的参考:
Microsoft.Xna.Framework.Color
Microsoft.Xna.Framework.Color

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

有什么想法我怎么能明确地告诉编译器使用ColorVector2类的MonoGame版本而不是官方的Microsoft版本?

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

解决此特定问题的方法是使用extern alias ( MSDN , 教程 )。

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

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

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

(当然,这个答案没有提到你在以这种方式混合MonoGame和XNA方面取得多大成功,function方面也是如此。希望它有效。)