D3DERR_INVALIDCALLエラー、TeamCityビルダー
質問
XNAプロジェクトのビルドを自動化するためにTeamCity 4.5を使用しようとしましたが、小さな問題があります。プロジェクトは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
これを引き起こしている原因はわかりません。私が言ったように、ContentPipelineプロジェクトとSharedContentプロジェクト(ソリューションの一部)だけでなく、.fbxモデルも正しくコンパイルできます。
私が実際に望んでいるのは、問題の原因となるものへのポインターです(可能であれば、問題の解決策)。私が理解している限りでは、D3Dライブラリに問題があるようです。また、このソリューション全体がVisual Studio 2008でコンパイルされるため、TeamCityに小さな問題があります。何かを提供していないか、実際に何かが正しく設定されていません。
解決
ほぼ確実に、Team Cityはビルドプロセスをローカルシステムとして非インタラクティブモードで実行しており、グラフィックデバイスを実際にアクセスして取得するユーザーとしてではありません。 DirectXはグラフィックデバイスを取得できないため、リモートデスクトップインターフェイスを介してテクスチャをバッチ処理しようとしても問題が発生していることを知っています。
ソリューションは、Team Cityが、ローカルシステムとして、またはサービスとしてではなく、ログオンユーザーとして実行するビルダーを要求する機能を提供するかどうかを確認することです。チームシティで。
他のヒント
解決策はありませんが、考えていました。
エラーはD3DERR_INVALIDCALLであるため、何らかの理由でその時点ではデバイスが利用できないと考えています。
1)ビルドを実行しているマシンにDirectXがインストールされているか、グラフィックカードがありますか? XNAにはシェーダー付きのカードが必要ですが、TeamCityはビルドディストリビューションであるため、それがないマシンで実行されている可能性があるので、私はイエスと仮定していますか?
2)たぶん、TeamCityが同じマシン/プロセスで作成されるDirect3Dデバイスが多すぎます(完全な推測)。
正しくコンパイルするモデルファイルはテクスチャを使用しますか、それとも単なるジオメトリデータですか?コンテンツビルダーは、モデルを構築するためにDirectXにアクセスする必要はなく、テクスチャデータにアクセスする必要があると感じています。 Direct3Dへのアクセスを必要とする他の何かを構築できますか?コンテンツフォルダーにテクスチャが1つだけあるTeamCityを使用してプロジェクトをビルドできますか?
これが機能するかどうかはわかりませんが、DirectXをデバッグモードで実行し、出力を確認することで詳細情報を取得できますか?
これがいくらか役立つことを願っています。
XNAおよびDirectX 9では、コンテンツフォルダーをコンパイルするために、現在ログインしているユーザーが必要です。
ソリューションは簡単で、XNAの前提条件(VS2008、XNA Game Studio 3.0など)を使用してビルドエージェントマシン(実際の物理マシン)をセットアップし、起動時にログインしてから、実行するスクリプトを作成します。ログイン時のチームサーバーエージェント([スタート]メニューの[スタートアップ]フォルダーにエージェント実行スクリプトへのショートカットを配置することにより)。
これにより、エージェントはローカルユーザーとして実行され、通常どおりビルドできます。
これを実行し、動作することを確認できます。
古いスレッドを上にドラッグして申し訳ありませんが、TCにWindows ServerでXNAプロジェクトを構築させようとしてまったく同じ問題に遭遇し、他の人が同じ問題に遭遇するのを助けたいと思いました。
非常に有望なソリューションのように見えるこの記事とブログを見つけました。 http://forums.create.msdn.com/forums/p/86699 /532976.aspx
&
http://blogs.msdn.com/ b / astebner / archive / 2011/07/07 / 10184338.aspx
Aaronは基本的に、Win Phone SDK 7.1 Beta 2の新しいベータ版にはXNA Game Studio 4.0 Refresh Beta 2が含まれていると述べています。これにより、次のタイプの構成でコンテンツパイプラインを介してコンテンツを構築できます:
ビルド中に画面がロックされている場合 ヘッドレスコンピューターでビルドを実行している場合 非対話型ユーザーアカウントからビルドを実行している場合
しかし、それはVista以降でのみ実行されるように見えます-うまくいけば、サーバーも含まれるべきです。更新:いいえ、残念ながらWindows Serverにはインストールされません:(