2009-06-21 7 views
5

私はTeamCity 4.5を使用してXNAプロジェクトのビルドを自動化しようとしていましたが、小さな問題があります。私のプロジェクトはVisual Studio 2008で正しくコンパイルされますが、TeamCityをビルダーとしてコンパイルした場合は正しくコンパイルされません。設定ファイルはsln2008の設定を使用し、コンパイルはしばらくの間、うまくいく、しかし、すぐにそれが.xnbする.PNGテクスチャをコンパイル行くように、私は次のエラーを取得する:D3DERR_INVALIDCALLエラー、TeamCityビルダー

[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には少し問題があります。何かを提供していないか、実際には間違って設定されていることがあります。

答えて

2

ほぼ確実にTeam Cityは、ローカルシステムとしてビルドプロセスを非対話モードで実行しており、実際にグラフィックスデバイスを取得するアクセス権と能力を持つユーザーではありません。私は、DirectXがグラフィックスデバイスをつかむことができないので、リモートデスクトップインターフェースを介してバッチ処理プロセスを試みても問題があることを知っています。

解決策は、Team Cityがローカルシステムとしてではなくログオンユーザーとしてビルダーを実行するように要求する機能を提供するかどうかを確認することです。チームシティで可能です。

+0

@Jeff:返信いただきありがとうございました。サービスがログインに使用するユーザーを変更しました。問題はまだ同じですが、今はサービスプロパティで「ハードウェアプロファイル」と呼ばれるものに関連しています。私は "Undocked Profile"しか持っていないようです(グラフィックカードへのアクセスはまだありません)。また、このハードウェアのプロファイルは他の場所から編集できないように見えます(私はそれを見つけて、それについて多くの人が返答しました) – tomzx

2

解決策はありませんが、私はそれについて考えていました。

エラーはD3DERR_INVALIDCALLなので、何らかの理由でその時点でデバイスが利用できないと思っています。

1)ビルドを実行しているマシンにDirectXがインストールされているか、グラフィックスカードがありますか? XNAはシェーダー付きのカードを必要とするので、私は「はい」と仮定していますが、TeamCityはビルドディストリビューションなので、マシンなしで実行しているかもしれません。

2)おそらくTeamCityが原因で、あまりにも多くのDirect3Dデバイスが同じマシン/プロセス(完全な推測)で作成されていますか?

正しくコンパイルされたモデルファイルはテクスチャを使用していますか、それとも単にジオメトリデータですか。コンテンツビルダーがモデルを構築するためにDirectXにアクセスする必要はなく、テクスチャデータのために機能するという感覚があります。 Direct3Dにアクセスする必要があるものは何でも作ることができますか? TeamCityを使ってコンテンツフォルダに1つのテクスチャだけを持つプロジェクトを構築できますか?

これが機能するかどうかはわかりませんが、DirectXをデバッグモードで実行して出力を調べると詳細情報が得られますか?

これは多少役立ちます。

+0

私は(2)に行くだろう。(1)の解決策として、彼はDX SDKをインストールすることができました。問題がある場合 –

+0

@Kath:返信ありがとうございますサーバーとビルドマシンの両方が同じであることを指定するのを忘れたので、1を式から削除できます DirectXをデバッグモードで使用すると、 -2146233082。 イメージと基本的なゲームプロジェクトだけで構成された小さなプロジェクトを作成しましたが、イメージなしではコンパイルできません。 – tomzx

2

XNAとDirectX 9では、コンテンツフォルダをコンパイルするために、現在ログインしているユーザーが必要です。

解決策は簡単です.XNA(VS2008、XNA Game Studio 3.0など)の前提条件を備えたビルドエージェントマシン(実際の物理マシン)をセットアップし、起動時にログインさせてからスクリプトを作成しますログイン時にチームサーバエージェントを実行します(エージェントの実行スクリプトへのショートカットをスタートメニューのスタートアップフォルダに配置します)。

この方法では、エージェントはローカルユーザーとして実行され、通常の方法で構築できます。

私はこれを行い、それが動作することを確認することができます。

2

古いスレッドをドラッグして申し訳ありませんが、私はちょうどWindows Server上で自分のXNAプロジェクトを構築するTCを取得しようとしている同じ問題を同じ問題に遭遇しています。

私は非常に有望な解決策のように見え、この記事やブログを見つけた: http://forums.create.msdn.com/forums/p/86699/532976.aspx

&

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

アロンは基本的に勝つ電話SDK 7.1ベータ版の新しいベータ版と述べ​​ています2にはXNA Game Studio 4.0 Refresh Beta 2が含まれており、コンテンツパイプライン経由で次の種類の構成でコンテンツを構築できます。

画面をあなたは非対話型のユーザーアカウント

からビルドを実行している場合は、ヘッドレスコンピュータ 上でビルドを実行している場合は、ビルド 中にロックされた。しかし、それはそれだけでVista上で実行されますように見えるされている場合うまくいけば、それにはサーバーも含めるべきです。アップデート:いいえ、悲しいことに私のWindowsサーバーにインストールされません:(

+0

CTRL-ALT-DELETEを介してタスクマネージャに入りました。そうしている最中に画面が表示され、ビルド時にこのエラーが発生しました。この情報を私と共有してくれてありがとう。これは特に私の答えでした! – Xonatron