2013-03-05 30 views
6

MonoGame (un framework che porta in pratica XNA a Windows Phone 8) ha tutti i suoi namespace con prefisso Microsoft.Xna.Framework Credo di ridurre al minimo la quantità di modifiche al codice richieste quando si porta l'app XNA a MonoGame.Riferimento ambiguo tra gli spazi dei nomi MonoGame e Microsoft.XNA.Framework

Il mio problema è che desidero accedere alla classe Microphone, che, poiché non è stata ancora creata in MonoGame, devo utilizzarla dall'interno della classe Microsoft XNA ufficiale, ciò richiede la rimozione forzata esplicita di i riferimenti standard Microsoft.XNA.Framework.dll all'interno di .csproj che il mio modello MonoGame ha impostato per evitare conflitti, che funziona benissimo e ora Microphone è accessibile, ma così facendo ho creato ambiguità tra alcune classi chiave che esistono sia nel numero standard di Microsoft che in MonoGame.

Gli errori che mi giungono sono:

riferimento ambiguo:
Microsoft.Xna.Framework.Color
Microsoft.Xna.Framework.Color

Questo ha ovviamente verificato perché insieme la libreria XNA standard emessa da Microsoft, ho un riferimento a MonoGame.Framework.dll che requisisce lo spazio dei nomi, creando questa ambiguità. Tuttavia, in tutti i casi, desidero accedere alla versione di MonoGame.

Qualche idea su come posso dire esplicitamente al compilatore di utilizzare la versione MonoGame della classe e Vector2 e non quella ufficiale di Microsoft?

Qualsiasi tentativo in un using Color = Microsoft.Xna.Framework ovviamente non funzionerà perché entrambi sono etichettati lo stesso nelle dll compilate!

+0

Se gli spazi dei nomi sono identici, sembra che dovrai ricompilare MonoGame per utilizzare un diverso spazio dei nomi. L'unica altra alternativa è creare un wrapper per i pochi metodi che si desidera utilizzare. Assicurati di essere esplicito in quale riferimento desideri effettivamente utilizzare in questa nuova classe. Ti avvertirò anche riguardo l'utilizzo di XNA poiché Microsoft ha sostanzialmente interrotto il suo sviluppo. –

+0

Grazie, prenderò in considerazione un involucro .. sperando solo in qualcosa di più elegante. – GONeale

+0

Si desidera utilizzare entrambi i riferimenti e entrambi condividono lo stesso spazio dei nomi il problema è con MonoGame non c'è una soluzione elegante. Ovviamente dubito seriamente che lo spazio dei nomi completo sia 'Microsoft.Xna.Framework.Colore 'dovresti guardare il codice per determinare cosa sia in realtà. –

risposta

8

Il modo per risolvere questo problema specifico è utilizzando un extern alias (MSDN, tutorial).

In questo modo è possibile creare alias della DLL Microsoft XNA e specificare un'istruzione appropriata using solo per la classe Microphone. Continua a utilizzare MonoGame come di consueto.

Probabilmente una soluzione migliore potrebbe essere quella di creare la propria classe wrapper denominata Microphone nello spazio nomi Microsoft.Xna.Framework.Audio utilizzando questa tecnica. Inseriscilo in un assieme separato in modo da non dover inquinare il codice sorgente principale con il materiale extern alias.

Il modo ideale, naturalmente, è di applicare concretamente Microphone per MonoGame e contribuire esso;)

(Naturalmente, questa risposta non dice nulla su quanto successo si potrebbe essere a mescolare MonoGame e XNA in questo modo, Speriamo che funzioni.)

+0

Ehi Andrew, grazie per la tua risposta e gli auguri dal G/C :) Solo circa un'ora da te ....;) Will dare l'alias "extern" quando torno a casa, grazie. – GONeale

+0

Ahh .. sei stato l'autore di "Dark" dolce :) Ho pensato che il tuo nome suonasse familiare ... – GONeale

+0

Eccellente! Ho trovato l'alias di extern il modo migliore per andare, ora ho dichiarato quanto segue, mentre sono prolisso, preferisco piuttosto che mantenere una libreria di wrapper: 'MonoGameFramework :: Microsoft.Xna.Framework.GraphicsDeviceManager graphics; MonoGameFramework :: Microsoft.Xna.Framework.Graphics.SpriteBatch spriteBatch; private MonoGameFramework :: Microsoft.Xna.Framework.Graphics.SpriteFont spriteFont; Microfono privato mic = Microfono.Default; ' Questo mi ha permesso di utilizzare sia le classi standard Microsoft.XNA.Framework fornite da WP8 sia quelle di MonoGame, grazie ancora per il suggerimento! – GONeale