Pregunta

He estado tratando de usar TeamCity 4.5 para automatizar las compilaciones de un proyecto XNA, pero tengo un pequeño problema. Mis proyectos se compilan correctamente en Visual Studio 2008, pero no cuando se compilan con TeamCity como generador. El archivo de configuración usa la configuración sln2008, y la compilación funciona bien por un tiempo, pero tan pronto como compila texturas .png a .xnb, aparece el siguiente error:

[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

No tengo idea de qué está causando esto. Como dije, es capaz de compilar modelos .fbx correctamente, así como mi proyecto ContentPipeline y mi proyecto SharedContent (parte de la solución).

Lo que realmente me gustaría es algunos indicadores de cuál sería la fuente del problema (y, si es posible, una solución al problema). Por lo que yo entiendo, parece haber un problema con la biblioteca D3D. También le recordaré que toda esta solución se compila en Visual Studio 2008, por lo que hay un pequeño problema con TeamCity, o no he proporcionado algo o algo está configurado incorrectamente.

¿Fue útil?

Solución

Casi con certeza, Team City está ejecutando su proceso de compilación como Sistema local en un modo no interactivo, y no como un usuario que realmente tiene el acceso y la capacidad de tomar el dispositivo gráfico. Sé que he tenido problemas incluso al intentar procesar texturas por lotes a través de una interfaz de Escritorio remoto porque DirectX no puede tomar el dispositivo gráfico.

La solución puede ser ver si Team City le ofrece la posibilidad de solicitar que su constructor se ejecute como un usuario conectado, no como un sistema local o como un servicio, aunque no puedo decirle que eso sea realmente posible en Team City.

Otros consejos

No tengo una solución, pero he estado pensando en ello.

El error es D3DERR_INVALIDCALL, así que creo que el dispositivo no está disponible en ese momento por alguna razón.

1) ¿Las máquinas que ejecutan la compilación tienen instalado DirectX / una tarjeta gráfica? Supongo que sí, ya que XNA requiere una tarjeta con sombreadores, pero TeamCity es una distribución de compilación, ¿tal vez se ejecuta en una máquina sin ella?

2) ¿Quizás TeamCity está causando que se creen demasiados dispositivos Direct3D en la misma máquina / proceso (conjetura completa)?

¿Los archivos de modelo que se compilan correctamente usan texturas o son solo datos de geometría? Tengo la sensación de que el creador de contenido no necesita acceso a DirectX para construir modelos, pero sí para los datos de textura. ¿Puedes construir algo más que requiera acceso a Direct3D? ¿Puedes construir un proyecto usando TeamCity que solo tiene una textura en su carpeta de contenido?

No estoy seguro de si esto funcionaría, pero ¿puede obtener más información ejecutando DirectX en modo de depuración y mirando el resultado?

Espero que esto ayude un poco.

XNA y DirectX 9 requieren un usuario conectado actualmente para compilar la carpeta de Contenido.

La solución es simple, configure una máquina de agente de compilación (máquina física real) con los requisitos previos para XNA (VS2008, XNA Game Studio 3.0, etc.) e inicie sesión en el inicio, luego cree un script para ejecutar el agente del servidor del equipo cuando inició sesión (colocando un acceso directo al script de ejecución del agente en la carpeta de inicio en el menú de inicio).

De esta forma, el agente se ejecutará como el usuario local y puede compilar normalmente.

He hecho esto y puedo confirmar que funciona.

Perdón por arrastrar un subproceso anterior, pero acabo de encontrarme exactamente con el mismo problema al intentar que TC construya mi proyecto XNA en Windows Server y quería ayudar a otros a encontrar el mismo problema.

Acabo de encontrar este artículo y blog que parece una solución muy prometedora: http://forums.create.msdn.com/forums/p/86699 /532976.aspx

& amp;

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

Aaron básicamente afirma que la nueva versión beta de Win Phone SDK 7.1 Beta 2 contiene XNA Game Studio 4.0 Refresh Beta 2 que ahora le permite crear contenido a través de la tubería de contenido en los siguientes tipos de configuraciones:

Si su pantalla está bloqueada durante una compilación Si está ejecutando una compilación en una computadora sin cabeza Si está ejecutando una compilación desde una cuenta de usuario no interactiva

Pero parece que solo se ejecutará en Vista o superior, con suerte eso también debería incluir servidores. Actualización: No, lamentablemente no se instalará en mi servidor de Windows :(

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top