我們正在用CruiseControl.Net和MSBuild建立一個新的構建服務器。經過相當多的工作後,它主要工作,除了一個項目(七個中有一個)拒絕在MSBuild下構建的問題。這裏的錯誤:MSBuild沒有針對右彙編?
error CS1061: 'System.Web.UI.HtmlControls.HtmlForm' does not contain a definition for 'Action' and no extension method 'Action' accepting a first argument of type 'System.Web.UI.HtmlControls.HtmlForm' could be found (are you missing a using directive or an assembly reference?)
所有的代碼仍然是舊的生成服務器上編譯的罰款,並在新的構建服務器,而不是完全匹配的,是同樣配置到老。
我可以想出這個錯誤的唯一原因是用於編譯的System.Web.dll是v1.1,而不是v2.0,因爲Action方法不在v1.1中框架。
我不確定爲什麼在舊的構建服務器上從來沒有看到這個錯誤出現在新的服務器上。我甚至不確定如何深入查找可能的原因。我曾嘗試使用/toolsversion:3.5參數集運行MSBuild。我將冗長級別設置爲最高級別,然後將輸出與舊構建服務器進行比較,但沒有任何指向原因的東西(至少對我來說沒有任何明顯的)。
有幾個項目是在這個之前構建的,沒有一個失敗,儘管它們都使用了更新的框架版本(3.5)。這是唯一引用System.Web.HtmlControls的項目。
有沒有人有類似的問題?任何人都可以提供任何幫助/提示如何最好地嘗試和達到MSBuild問題的底部?
更新 兩個服務器之間的.sln和.csproj文件是相同的。有一件事我在.csproj的文件中注意到的是對System.Web引用沒有框架的要求:
<Reference Include="System.Web" />
我要去嘗試添加<RequiredTargetFramework>
這個參考,看看是否有差別。
更新2 更新中的csproj文件中提及以下內容: <Reference Include="System.Web"> <RequiredTargetFramework>3.5</RequiredTargetFramework> </Reference>
似乎並沒有工作。下一步,下載SDK,這樣我就可以在System.Web上使用ILDASM,看看我的框架安裝是否有問題(具體來說,我的v2.0框架中的system.web.dll是否具有該方法)。
更新3 該問題似乎與v2.0.5072框架文件夾中的system.web.dll。它確實有而不是在HtmlForm類上有Action方法。我不知道如何可能發生這樣的事情,但我將不得不整理出這臺服務器上的框架。
如果您查看工作且不工作的.csproj或.vbproj文件的文本,它們是否以相同的方式表示引用?有不同的提示路徑嗎? – 2011-06-16 10:26:19