Вопрос

Я пытался использовать 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 есть небольшая проблема, либо я что-то не предусмотрел, либо вообще что-то неправильно настроено.

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

Извините, что поднимаю старую тему, но я только что столкнулся с точно такой же проблемой, пытаясь заставить 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 :(

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top