2010-04-22 22 views
1

我們有一個針對.NET 3.5的VS2008 CS DLL項目。使用MSBuild 3.5時,它在我們的CI服務器上成功構建。由於1個編譯器警告,MSBuild 4無法生成VS2008 csproj

當CI升級到使用的MSBuild 4.0,同一項目中構建失敗,由於1警告消息:

C:\ WINDOWS \ Microsoft.NET \框架\ v3.5版本\ Microsoft.Common .targets(1418,9): 警告MSB3283:找不到包裝類型庫「ADODB」的包裝 。

警告不會的MSBuild 3.5出現,我很驚訝,它導致構建失敗。我們沒有將該項目設置爲將警告視爲錯誤。

我們所有的其他項目都可以用任一版本的MSBuild成功構建。

+0

爲什麼你使用** v3.5 ** Microsoft.Common.targets與MSBuild 4.0? – dtb 2010-04-22 23:05:13

+0

我相信這是由於.csproj文件中的版本 - Project ToolsVersion =「3.5」 – 2010-04-22 23:26:29

回答

1

錯誤信息並未告知整個故事。我們的開發機器上的ADODB程序集已加載到GAC中。 CI構建機器上的情況並非如此。

對ADODB的引用僅在C#項目中(通過引用MSXML和VBA dll)由TLBIMP預生成任務放置到我們的C#項目中。後者的DLL包含在我們的源代碼庫中,因此可以在CI構建過程中找到。 ADODB不是。但是,我們也發現我們可以安全地從C#項目中刪除所有添加的引用,包括ADODB.DLL。

這解決了這個問題。 (感謝您的建議 - 他們讓我一直思考,直到我們到達那裏。)

0

嘗試刪除msbuild(和csproj)文件中的任何硬連線工具版本,或將它們設置爲ToolsVersion =「4.0」。

閱讀:http://msdn.microsoft.com/en-us/library/bb383796.aspx更好地理解屬性的意義。 由於您要定位到3.5,因此請確保通過檢查csproj中的TargetFrameworkVersion來正確設置目標框架版本。

<TargetFrameworkVersion>v3.5</TargetFrameworkVersion> 

如果設置ToolsVersion到4.0,即要建立項目的任何機器,都會對4.0框架的依賴性(具有4.0的MSBuild),即使你靶向3.5。

如果您的目標是3.5,並且您的項目是VS2008,則不需要使用msbuild 4.0而不是msbuild 3.5(它們可以並排存在)。只使用3.5 msbuild將是更簡單的解決方案。

+0

這聽起來似乎合理,並且我閱讀了您提供的鏈接。我在構建文件和csproj文件中進行了更改。但是錯誤仍然是一樣的,只是現在已經出現在.NET Framework v4.0.30319中。 雖然我們的目標是3.5,並且該項目目前是VS2008(即將升級 - 這應該可以解決這個問題),對於CruiseControl來說。NET中,您可以在ccnet.config文件中設置MSBuild的版本,即全局爲所有項目。由於我們有在CC.NET下運行的VS2010項目,這需要v4.0。 – 2010-04-26 01:14:37

+0

是否有可能讓你的主要CI構建腳本產生一個msbuild 3.5並通過產生的msbuild建立2008/3.5項目?產卵可以通過'exec'msbuild任務完成。 – Frederik 2010-04-26 14:46:32

+0

這聽起來像一個值得嘗試的想法。將回報。 – 2010-04-27 21:49:36

0

這是一個ClickOnce問題。從列表中刪除該依賴項。

順便說一句,這個bug也存在於VS2008中,但似乎沒有爲你觸發。

+0

我們不使用ClickOnce,所以我不明白這可能是一個ClickOnce問題?我在尋找什麼樣的依賴性? – 2010-04-26 00:50:12

+0

@David White:ADODB,IIRC它與Report Viewer一起被包含在我的例子中,但其他東西可能會'需要'它。 ClickOnce對我們錯誤的,但問題可能會更早。確保項目文件中沒有ClickOnce設置(或者只是在項目文件文本中搜索ADODB參考)。 – leppie 2010-04-26 06:03:20

+0

ADODB是必需的。 – 2010-04-27 21:52:23