Ошибка D3DERR_INVALIDCALL, сборщик TeamCity - PullRequest
5 голосов
/ 22 июня 2009

Я пытался использовать TeamCity 4.5 для автоматизации сборок проекта XNA, но у меня небольшая проблема. Мои проекты правильно компилируются в Visual Studio 2008, но не при компиляции с TeamCity в качестве сборщика. В файле конфигурации используется параметр sln2008, и некоторое время компиляция проходит хорошо, но как только он начинает компилировать текстуры .png в .xnb, я получаю следующую ошибку:

[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

У меня нет никаких идей, что вызывает это. Как я уже сказал, он способен правильно компилировать модели .fbx, а также мой проект ContentPipeline и мой проект SharedContent (часть решения).

Что мне на самом деле хотелось бы, так это несколько указателей на то, что могло бы стать источником проблемы (и, если возможно, решения проблемы). Насколько я понимаю, похоже, проблема с библиотекой D3D. Я также напомню, что все это решение компилируется в Visual Studio 2008, поэтому существует небольшая проблема с TeamCity: либо я что-то не предоставил, либо что-то на самом деле неправильно установлено.

Ответы [ 4 ]

2 голосов
/ 07 августа 2011

Извините, что перетащил старый поток, но я только что столкнулся с той же самой проблемой, пытаясь заставить TC построить мой проект XNA на Windows Server, и хотел помочь другим, сталкивающимся с той же проблемой.

Я только что нашел эту статью и блог, который выглядит как очень многообещающее решение: http://forums.create.msdn.com/forums/p/86699/532976.aspx

&

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

Аарон в основном утверждает, что новая бета-версия Win Phone SDK 7.1 Beta 2 содержит XNA Game Studio 4.0 Refresh Beta 2, которая теперь позволяет создавать контент через конвейер контента в следующих типах конфигураций:

Если ваш экран заблокирован во время сборки Если вы используете сборку на безголовом компьютере Если вы используете сборку из неинтерактивной учетной записи пользователя

Но похоже, что он будет работать только на Vista или выше - надеюсь, это будет включать и серверы. Обновление: Нет, к сожалению, он не будет установлен на моем Windows Server: (

2 голосов
/ 26 июня 2009

Почти наверняка Team City запускает процесс сборки как локальная система в неинтерактивном режиме, а не как пользователь, у которого есть доступ и возможность захватить графическое устройство. Я знаю, что у меня были проблемы даже с попыткой пакетной обработки текстур через интерфейс удаленного рабочего стола, потому что DirectX не может захватить графическое устройство.

Решение может заключаться в том, чтобы выяснить, предлагает ли Team City возможность запрашивать, чтобы ее строитель работал как зарегистрированный пользователь, а не как локальная система или как служба, хотя я не могу сказать вам, что это даже возможно в Team City.

2 голосов
/ 13 июля 2009

Для XNA и DirectX 9 требуется текущий зарегистрированный пользователь, чтобы скомпилировать папку Content.

Решение простое: настроить машину агента сборки (реальную физическую машину) с предварительными требованиями для XNA (VS2008, XNA Game Studio 3.0 и т. Д.) И заставить его войти в систему при запуске, а затем создать сценарий для запуска агент сервера группы при входе в систему (путем помещения ярлыка для сценария запуска агента в папку запуска в меню «Пуск»).

Таким образом, агент будет работать как локальный пользователь и может работать как обычно.

Я сделал это и могу подтвердить, что это работает.

2 голосов
/ 24 июня 2009

У меня нет решения, но я думал об этом.

Ошибка D3DERR_INVALIDCALL, поэтому я думаю, что устройство по какой-то причине недоступно в то время.

1) На компьютерах, на которых выполняется сборка, установлена ​​DirectX / видеокарта? Я предполагаю, что да, поскольку XNA требует карту с шейдерами, но TeamCity является дистрибутивом сборки, так что, возможно, он работает на машине без нее?

2) Возможно, TeamCity вызывает слишком большое количество устройств Direct3D для создания на одном компьютере / процессе (полное предположение)?

Используются ли в файлах модели, которые правильно компилируются, текстуры или это просто данные геометрии? У меня есть ощущение, что сборщик контента не нуждается в доступе к DirectX для построения моделей, но нужен для данных текстуры. Можете ли вы построить что-нибудь еще, что требует доступа Direct3D? Можете ли вы создать проект с использованием TeamCity, в котором только одна текстура находится в папке содержимого?

Я не уверен, что это сработает, но можете ли вы получить больше информации, запустив DirectX в режиме отладки и просмотрев вывод?

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...