6

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

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

我收到的错误是:

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

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

有什么想法可以明确告诉编译器使用ColorandVector2类的 MonoGame 版本而不是 Microsoft 官方版本吗?

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

4

1 回答 1

8

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

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

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

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

(当然,这个答案并没有说明你以这种方式混合 MonoGame 和 XNA 的成功程度,功能方面。希望它有效。)

于 2013-03-05T13:38:04.107 回答