2009-06-21 49 views
5

我一直在努力,以自動使用的TeamCity 4.5構建一個XNA項目,但我有一個小問題。我的項目在Visual Studio 2008下正確編譯,但不能在使用TeamCity編譯爲構建器時編譯。該配置文件使用sln2008設置,編譯順利了一段時間,但只要它去編譯png格式紋理.xnb,我得到以下錯誤: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

幾乎可以肯定,團隊市運行它在非交互模式建立過程作爲本地系統,而不是實際擁有的訪問和抓取圖形設備能力的用戶。我知道我有問題,甚至嘗試通過遠程桌面界面批量處理紋理,因爲DirectX無法抓取圖形設備。

解決方案可能是查看Team City是否允許您請求其構建器以登錄用戶身份運行,而不是作爲本地系統或服務運行,儘管我無法告訴您這實際上是偶數在Team City中可能。

+0

@Jeff:謝謝你的回覆。並更改了服務用於登錄的用戶。問題依然存在,但我相信現在是這樣與服務屬性中的「硬件配置文件」相關。我似乎只有一個「Uockock Profile」(可能還沒有訪問圖形卡,很難說)。此外,這個硬件配置文件看起來並不像它可以從其他地方編輯(我GOOGLE了它,它回來了很多人抱怨) – tomzx 2009-06-26 01:20:01

2

我沒有解決方案,但我一直在想它。

的錯誤是D3DERR_INVALIDCALL所以我想該設備不可用當時出於某種原因。

1)運行構建的機器是否安裝了DirectX /圖形卡?我假設是因爲XNA需要一張帶着色器的卡片,但TeamCity是一個構建發行版,所以也許它在沒有它的機器上運行?

2)可能的TeamCity引起太多太多的Direct3D裝置要在同一臺機器/過程(完整的猜測)創造出來的?

編譯正確的模型文件是否使用了紋理,還是隻是幾何數據?我有一種感覺,內容構建器不需要訪問DirectX來構建模型,但是可以使用紋理數據。你能建立其他需要訪問Direct3D的東西嗎?你可以使用TeamCity構建一個項目,該項目的內容文件夾中只有一個紋理?

我不知道這是否會工作,但您可以通過在調試模式下運行DirectX和查看輸出獲得更多的信息?

希望這有些幫助。

+0

我會去(2)。作爲解決方案(1)他可以安裝DX SDK - 它有參考設備,這不會導致這些問題 – 2009-06-24 12:29:20

+0

@Kath:謝謝你的回覆,我忘了指定服務器和編譯機器都是一樣的,因此可以從等式中刪除1 在調試模式下,我得到一個進程退出代碼: -2146233082。 我做了一個小項目,只包含一個圖像和基本的遊戲項目,沒有圖像,它編譯時,它沒有, – tomzx 2009-06-24 17:32:28

2

XNA和DirectX 9需要當前登錄用戶才能編譯Content文件夾。

該解決方案很簡單,建立一個具有XNA(VS2008,XNA Game Studio 3.0等)的預先需求的構建代理機器(真正的物理機器)並使其在啓動時登錄,然後創建一個腳本登錄時運行團隊服務器代理(通過在開始菜單的啓動文件夾中放置代理運行腳本的快捷方式)。

這樣代理將以本地用戶身份運行,並且可以正常生成。

我已經完成了這項工作,可以確認它是否有效。

2

對不起,拖動一箇舊的線程,但我剛剛遇到了同樣的問題,試圖讓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

亞倫基本規定,贏手機SDK 7.1測試版的新的測試版2包含XNA Game Studio 4.0 Refresh Beta 2,現在允許您通過內容管道在以下類型的配置中構建內容:

如果如果你是一個無頭的計算機 上運行的構建如果是從非交互式用戶帳戶

運行構建你的屏幕是一個構建 期間鎖定,但它看起來像它只會在Vista上運行或以上 - 希望這應該包括服務器。更新:不要傷心它不會安裝在我的Windows服務器:(