個人對App_Code的理解:
建立全站的通用類,打開網站時即時編譯App_Code文件夾下面的.cs文件。
在App_Code文件夾下面的.cs文件中的類,在每個文件裡都可以調用。。
個人對namespace的理解:
比如:在App_Code/a.cs中有namespace testA
在網站的根目錄下的default.aspx.cs文件中也有namespace testA,那麼在此文件中就可以直接調用App_Code/a.cs 中的類名。如果在網站的根目錄下的default.aspx.cs文件中是namespace testB那麼想要使用App_Code/a.cs中有 namespace testA的類名就必須使用以下引用:using testA;
以下是網上摘錄的關於App_Code 目錄的文章:
ASP.NET 2.0 引入了 App_Code 目錄,該目錄可以包含一些獨立文件,這些文件包含要在應用程序中的多個頁之間共享的代碼。與 ASP.NET 1.x 不同 (1.x 需要將這些文件預編譯到 Bin 目錄),App_Code 目錄中的所有代碼文件都將在運行時動態編譯,然後提供給應用程序。可以在 App_Code 目錄下放置多種語言的文件,前提是將這些文件劃分到各子目錄中(在 Web.config 中用特定語言注冊這些子目錄)。默認情況 下,App_Code 目錄只能包含同一種語言的文件。但可以將 App_Code 目錄劃分為若干子目錄(每個子目錄包含同一語言的文件)以便可以在 App_Code 目錄下包含多種語言。為此,需要在應用程序的 Web.config 文件中注冊每個子目錄。
<configuration>
<system.web>
<compilation>
<codeSubDirectories>
<add directoryName="Subdirectory"/>
</codeSubDirectories>
</compilation>
</system.web>
</configuration>
以上是關於 App_Code 的官方描述。描述中提到“運行時動態編譯”,為了弄清楚 App_Code 目錄下的文件在何時編譯,於是寫了段程序進行測試
TestClass.cs
public class TestClass
{
public static int m_Count = 0;
public TestClass()
{
m_Count++;
}
public string GetMessage(string str)
{
return "Hello : " + str;
}
}
ASPX 頁中的代碼
<%
TestClass t = new TestClass();%>
<%=t.GetMessage("SoftDiyer")%><br>
m_Count=<%=TestClass.m_Count%>
我在兩個 ASPX (Test1.aspx 和 Test2.aspx)頁中放了這些代碼,先訪 問 Test1.aspx , m_Count=1; 然後再訪問 Test2.aspx m_Count=2;修改 TestClass.cs 中的內容重新訪問 Test2.aspx , m_Count =1;由此看出 .net 框架在監視 App_Code 目錄,當目錄中的文件發生變化時,觸發 .net 的動態編譯。
App_Code 、 Asp 的 Include 、.Net 中的 Import 的比較:
App_Code 與asp 中的 include 不同:App_Code 采用編譯機制而 asp 中的 include 采用的是解釋的機制 ,表面上看實現的目的和方式有點類似,但是處理方式完全不同。使用代碼目錄方式使程序變的更高效更容易維護。
App_Code 和 Import 的不同:從調用代碼看區別在於,使用 Import 時必須在文件中使用 Import 語句,而代碼目錄方式不需要。使用 Import 語句一般是使用已經編譯好的類,在運行之前已經編譯好了。而代碼目錄則在運行時編譯,這樣就增加了程序的靈活性。