Domanda

Ho provato a usare TeamCity 4.5 per automatizzare le build di un progetto XNA ma ho un piccolo problema. I miei progetti vengono compilati correttamente in Visual Studio 2008, ma non quando vengono compilati con TeamCity come builder. Il file di configurazione utilizza l'impostazione sln2008 e la compilazione va bene per un po ', ma non appena va compilando le texture .png in .xnb, ottengo il seguente errore:

[11:28:41]: [Project "Content.contentproj" (default targets):] Content\head.png Building content threw InvalidOperationException: D3DERR_INVALIDCALL
at Microsoft.Xna.Framework.Content.Pipeline.CommonHelperFunctions.InitD3D()
at Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.InitD3D()
at Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.Import(String filename, ContentImporterContext context)
at Microsoft.Xna.Framework.Content.Pipeline.ContentImporter`1.Microsoft.Xna.Framework.Content.Pipeline.IContentImporter.Import(String filename, ContentImporterContext context)
at Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.ImportAssetDirectly(BuildItem item, String importerName)
at Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.ImportAsset(BuildItem item)
at Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAssetWorker(BuildItem item)
at Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAsset(BuildItem item)
at Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.RunTheBuild()
at Microsoft.Xna.Framework.Content.Pipeline.Tasks.BuildContent.RemoteProxy.RunTheBuild(BuildCoordinatorSettings settings, TimestampCache timestampCache, ITaskItem[] sourceAssets, String[]& outputContent, String[]& rebuiltContent, String[]& intermediates, Dictionary`2& dependencyTimestamps, KeyValuePair`2[]& warnings)
Inner exception: COMException: Exception from HRESULT: 0x8876086C

Non ho idea di cosa stia causando questo. Come ho detto, è in grado di compilare correttamente i modelli .fbx, nonché il mio progetto ContentPipeline e il mio progetto SharedContent (parte della soluzione).

Quello che vorrei davvero sono alcuni suggerimenti su quale sarebbe la fonte del problema (e, se possibile, una soluzione al problema). Per quanto ho capito, sembra esserci un problema con la libreria D3D. Ti ricorderò anche che l'intera soluzione si compila in Visual Studio 2008, quindi c'è un piccolo problema con TeamCity, o non ho fornito qualcosa o qualcosa è effettivamente impostato in modo errato.

È stato utile?

Soluzione

Quasi certamente, Team City sta eseguendo il suo processo di compilazione come sistema locale in modalità non interattiva, e non come un utente che ha effettivamente l'accesso e la capacità di afferrare il dispositivo grafico. So di aver avuto problemi anche nel tentativo di elaborare in batch le trame tramite un'interfaccia Desktop remoto perché DirectX non è in grado di afferrare il dispositivo grafico.

La soluzione potrebbe essere quella di vedere se Team City ti offre la possibilità di richiedere che il suo builder venga eseguito come utente connesso, non come Sistema locale o come servizio, anche se non posso dirti che in realtà è persino possibile in Team City.

Altri suggerimenti

Non ho una soluzione ma ci ho pensato.

L'errore è D3DERR_INVALIDCALL, quindi sto pensando che il dispositivo non sia disponibile in quel momento per qualche motivo.

1) Le macchine che eseguono la build hanno installato DirectX / una scheda grafica? Suppongo di sì poiché XNA richiede una scheda con shader ma TeamCity è una distribuzione build quindi forse è in esecuzione su una macchina senza di essa?

2) Forse TeamCity sta causando la creazione di troppi dispositivi Direct3D sulla stessa macchina / processo (ipotesi completa)?

I file del modello che vengono compilati correttamente usano trame o sono solo dati geometrici? Ho la sensazione che il costruttore di contenuti non abbia bisogno dell'accesso a DirectX per creare modelli, ma lo fa per i dati di trama. Puoi costruire qualcos'altro che richiede l'accesso a Direct3D? Puoi costruire un progetto usando TeamCity che ha solo una trama nella sua cartella del contenuto?

Non sono sicuro che funzioni, ma puoi ottenere maggiori informazioni eseguendo DirectX in modalità Debug e guardando l'output?

Spero che questo aiuti in qualche modo.

XNA e DirectX 9 richiedono un utente attualmente connesso per compilare la cartella Contenuto.

La soluzione è semplice, imposta una macchina dell'agente di compilazione (macchina fisica reale) con i pre-req per XNA (VS2008, XNA Game Studio 3.0, ecc.) e fai il login all'avvio, quindi crea uno script da eseguire l'agente del server del team quando ha effettuato l'accesso (posizionando un collegamento allo script di esecuzione dell'agente nella cartella di avvio nel menu di avvio).

In questo modo l'agente verrà eseguito come utente locale e potrà essere compilato normalmente.

L'ho fatto e posso confermare che funziona.

Mi dispiace trascinare un vecchio thread, ma ho appena incontrato lo stesso identico problema nel tentativo di convincere TC a costruire il mio progetto XNA su Windows Server e volevo aiutare gli altri a riscontrare lo stesso problema.

Ho appena trovato questo articolo e blog che sembra una soluzione molto promettente: http://forums.create.msdn.com/forums/p/86699 /532976.aspx

& amp;

http://blogs.msdn.com/ b / astebner / archive / 2011/07/07 / 10184338.aspx

Aaron afferma sostanzialmente che la nuova beta di Win Phone SDK 7.1 Beta 2 contiene XNA Game Studio 4.0 Refresh Beta 2 che ora consente di creare contenuti tramite la pipeline di contenuti nei seguenti tipi di configurazioni:

Se lo schermo è bloccato durante una compilazione Se stai eseguendo una build su un computer senza testa Se stai eseguendo una build da un account utente non interattivo

Ma sembra che funzionerà solo su Vista o sopra - speriamo che dovrebbe includere anche i server. Aggiornamento: No, purtroppo non verrà installato sul mio Windows Server :(

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top