2013-03-05 91 views
6

MonoGame(一个基本上将XNA带到Windows Phone 8的框架)的名称空间都以Microsoft.Xna.Framework为前缀,我相信在将XNA应用程序移植到应用程序时最小化所需的代码更改量MonoGame。MonoGame和Microsoft.XNA.Framework命名空间的歧义参考

我的问题是,我希望访问Microphone类,它由于尚未在MonoGame中创建,所以我必须在官方的Microsoft XNA类中使用它,这需要删除明确的强制删除我MonoGame模板都有设置,以避免冲突,它的伟大工程中的.csproj内的标准Microsoft.XNA.Framework.dll引用和现在Microphone可以访问,但其中无论是在微软的标准问题,MonoGame存在几个关键的类别之间这样做,我创建歧义。

我收到的错误是:

明确的引用:
Microsoft.Xna.Framework.Color
Microsoft.Xna.Framework.Color

这显然已经发生是因为伴随着标准的Microsoft发布的XNA库,我不得不MonoGame.Framework.dll参考其commandeers的命名空间,创造这种不确定性。但是,在所有情况下,我希望访问MonoGame版本。

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

using Color = Microsoft.Xna.Framework显然任何企图将无法工作,因为它们都标记在编译的DLL一样!

+0

如果命名空间是相同的话,好像你将不得不重新编译MonoGame使用不同的命名空间。唯一的另一种选择是为您想要使用的少数方法创建一个包装。确保你清楚地知道你真的想在这个新班级中使用哪一个参考。因为微软基本上已经停止开发,所以我也会提醒你关于使用XNA的问题。 – 2013-03-05 13:33:55

+0

谢谢,我会考虑一个包装..只是希望更优雅的东西。 – GONeale 2013-03-05 13:34:35

+0

你想同时使用引用和他们都有着完全相同的命名空间的问题是MonoGame没有一个完美的解决方案。当然,我严重怀疑完整的命名空间是“Microsoft.Xna.Framework”。颜色'你将不得不看代码来确定它实际是什么。 – 2013-03-05 13:35:26

回答

8

解决此特定问题的方法是使用extern aliasMSDN,tutorial)。

通过这种方式,您可以使用Microsoft XNA DLL的别名,并为Microphone类指定适当的using语句。照常继续使用MonoGame。

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

理想的方式,当然,是真正实现Microphone为MonoGame并有助于它;)

(当然,这个答案也不说你可能会取得多大成功,在以这种方式混合MonoGame和XNA,功能明智的。希望它的工作原理。)

+0

嘿安德鲁,感谢您从您的....回答和问候从G/C :)只有大约一小时;)将于谢谢,让我回家时给外部别名一个去。 – GONeale 2013-03-06 00:46:49

+0

啊..你是“黑暗”甜蜜的作者:)我以为你的名字听起来很熟悉...... – GONeale 2013-03-06 00:52:20

+0

太棒了!我发现外部别名是最好的方法,我现在有以下声明,而详细,我更喜欢维护一个包装库:'MonoGameFramework :: Microsoft.Xna.Framework.GraphicsDeviceManager图形; MonoGameFramework :: Microsoft.Xna.Framework.Graphics.SpriteBatch spriteBatch; private MonoGameFramework :: Microsoft.Xna.Framework.Graphics.SpriteFont spriteFont; 私人麦克风MIC = Microphone.Default;' 这使我能够同时利用通过WP8和MonoGame者提供的标准Microsoft.XNA.Framework类,再次感谢您的建议! – GONeale 2013-03-08 11:38:42