2013-03-05 86 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