2009-09-03 65 views
0

我有一個網站項目,我想要使用CruiseControl.net構建。網站項目建立在VS2008 SP1,但不是通過CruiseControl.net MSBUILD

在一個頁面上有嵌套Repeater控件中的用戶控件,我需要得到一個強類型引用在ItemDataBound事件處理程序的用戶控件:

ASP.usercontrols_stars_ascx stars = (ASP.usercontrols_stars_ascx)e.Row.FindControl("stars"); 
    stars.StarCount = Convert.ToInt32(drv["rating"]); 

這個工作在VS2008罰款斷裂處MSBUILD,出現以下錯誤:

w:\CCNet\InflatableBoats\Working\IBWeb\UserControls\DisplayReviews.ascx.cs (49,): 

errorCS0234:類型或命名空間名稱「usercontrols_stars_ascx」不存在命名空間「ASP」(?是否缺少程序集引用)

存在

我認爲這可能是一個命名空間問題,因爲MSBUILD似乎無法識別Web站點項目用於用戶控件和頁面的ASP名稱空間。

回答

0

您應該引用codebehind類而不是ascx生成的類。 ascx類繼承了你的代碼隱藏類。因此,在代碼隱藏中定義您的StarCount屬性,引用它,並且您應該沒問題。

0

顯然如果從瀏覽選項卡即在添加引用對話框的.NET選項卡列出引用的組件(這是不一樣GAC),這是在同一安裝位置,Visual Studio會假定您想使用註冊表來查找該文件。我認爲它將特定版本設置爲True,這是您在IDE中注意到的唯一方法。這可以防止任何人編譯它,即使它們在同一位置具有相同的DLL,除非它們已經運行該包的安裝程序。

當我將Unity應用程序塊直接安裝到TFS文件夾,然後將二進制文件添加到TFS時,這讓我有一次使用CruiseControl。 .csproj文件沒有引用的HintPath條目,所以構建服務器找不到該DLL。

我最終使用添加/刪除程序卸載該塊,然後再次從TFS獲取二進制文件。刪除並重新添加參考可以解決問題。

這可能與您的情況無關(我會先嚐試jrummell的建議),但認爲我會提及它。

Visual Studio傾向於認爲它比開發人員更瞭解它。通常它不是。

相關問題