2009-12-09 35 views
1

我們的一個承包商向我們提供了一個ASP.NET 2.0網站,並且將其集成到我們的流程中時遇到了一些問題。他把項目作爲一個壓縮目錄給我們,沒有解決方案文件或任何東西。我可以使用Open - > Website選項在Visual Studio中打開它,然後運行該網站。但是,我想將其設置爲Web應用程序項目,以便我可以將項目引用添加到我們的共享庫中,而不是將它們鏈接到「bin」目錄中,僅僅因爲我更喜歡定期執行項目。ASP 2.0和部分類

我遇到了一個奇怪的問題。讓我來提取一些代碼:

HeaderControl.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="HeaderControl.ascx.cs" Inherits="Controls_WebUserControl" %> 

HeaderControl.ascx.cs

public partial class Controls_WebUserControl : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 

好吧,這是有點怪,但它似乎是合法的,至少。基類在代碼隱藏(代碼文件?)中有部分定義。但後來許多其他控件都以同樣的方式定義,例如

SomeControl.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="SomeControl.ascx.cs" Inherits="Controls_WebUserControl" %> 

SomeControl.ascx.cs

public partial class Controls_WebUserControl : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 

預期地,當我嘗試建立我的新的Web應用程序項目,我已經將文件轉移到我得到了一堆有關在幾個地方定義相同的方法的錯誤。我不明白爲什麼它沒有設置一個代碼來定義控件類的部分定義和基類的重寫方法,但這有點不重要。

真正讓我感到困惑的是:原創工作如何?它運行並運行,所以編譯器必須做一些我不明白的事情。 Controls_WebUserControl類會發生什麼?該項目

+0

順便提一句,你是否曾經與承包商討論過獲得解決方案? – ChrisF 2009-12-09 21:42:53

+0

這是一個網站,所以沒有項目文件。 – 2009-12-09 21:47:38

回答

1

我要說的是,同時提供網站的作品,這是不正確。

它可以工作,因爲它是一個網站項目(而不是Web應用程序項目)。網站項目沒有網頁的名稱空間;相反,它會分別編譯每個頁面。換句話說,你可以說頁面的類名被忽略。

將它帶入Web應用程序項目時會失敗,因爲它嘗試構建一個名稱空間,並且因爲網頁和控件中的公用類名稱而失敗。

我會右鍵單擊,選擇轉換爲Web應用程序,然後修復頁面&控件上的類名稱。這應該讓你到你想要的地方。

+0

謝謝!我剛剛閱讀了關於asp.net內存中的編譯,並且您的文章證實了我的想法。我同意你的看法 - 儘管這樣做很有效,但這種做法很糟糕。 我實際上是要在運行嚮導之前修復類名 - 無需修復的文件。 – Egor 2009-12-09 22:25:02

2

,當你從一個網站到Web應用程序更改爲替換CodeFile="SomeControl.ascx.cs",你需要點擊右鍵並選擇「轉換爲Web應用程序」 。這應該更新所有頁面。

這是一個古老的鏈接,但我認爲它仍然是相關的:

http://webproject.scottgu.com/CSharp/migration2/migration2.aspx