成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET中使用App_Code文件夾的異常

開發(fā) 后端
很簡單。網站項目中除了該有的ASPX文件外,應該還有很多輔助的的CS文件,比如數據庫操作的,字符串操作等等所謂的輔助類。很多時候,我們可以新建一個Class Library來包含這些文件,以達到代碼復用的目的。

在Visual Studio中,新建一個網站有兩種方式:ASP.NET Web Site與ASP.NET Web Application。與Web Site相比,Web Application有很多優(yōu)勢。網上已經有很多文章來講述它們的區(qū)別了,Visual Studio的官方博客有一篇文章講述了它們各自的優(yōu)劣點。這里以Visual Studio 2010為例,新建一個Web Site的操作如下:

2012-05-19_174511

很簡單。網站項目中除了該有的ASPX文件外,應該還有很多輔助的的CS文件,比如數據庫操作的,字符串操作等等所謂的輔助類。很多時候,我們可以新建一個Class Library來包含這些文件,以達到代碼復用的目的。但有些時候,很多類文件只適用于當前的網站,或者我們不想搞得那么復雜,想直接在Web Site中添加類文件。這時Visual Studio會彈出一個對話框來告訴你應該把類文件放在一個稱為App_Code的文件夾中:

2012-05-19_175758

可以看到,這個App_Code的圖標是區(qū)別與一般文件夾的:

2012-05-19_180113

與此類似的還有一些特殊的文件夾,我們可以在Web Site的名稱上點右鍵,選擇 “Add ASP.NET Folder”:

2012-05-19_214313

關于這些特殊文件夾的作用,可以查閱MSDN上的這篇文章:ASP.NET Web Project Folder Structure

放在App_Code 文件夾中的源文件,CLR將會在運行時自動對這些代碼進行編譯。Web Site中的其他任何代碼都可以訪問產生的程序集。因此,App_Code 文件夾的工作方式與 Bin 文件夾很類似,不同之處是您可以在其中存儲源代碼而非已編譯的代碼。App_Code 文件夾及其在 ASP.NET Web 應用程序中的特殊地位使您可以創(chuàng)建自定義類和其他僅源代碼文件,并在 Web 應用程序中使用它們而不必單獨對它們進行編譯。更多App_Code文件夾與Bin文件夾的介紹,請點擊這里

好了,當我們新建ASP.NET Web Application項目的時候,我們也想像這樣添加一些和項目相關的類文件,而不是去新建一個Class Library。這時你會發(fā)現,Visual Studio里已經沒有App_Code這個特殊的文件夾了:

2012-05-19_215308

于是乎,你去Google或Baidu一下,那些文章就會告訴你讓你手動添加一個名為"App_Code"的文件夾。于是你也照做了,也發(fā)現Visual Studio也確實識別了該文件夾,因為它的圖標和在Web Site中的一樣了:

2012-05-19_220012

這時候,你在App_Code中添加一些.cs文件,結果發(fā)現在Code-behind中卻無法引用它們了。你又去Google了一下,結果告訴你讓你改變.cs文件的Build Action,將它從默認的Content改成Compile:

2012-05-19_220610

好了,終于可以引用App_Code中的類文件了,項目編譯也能通過,貌似一切正常。估計此時你還會埋怨微軟為什么要把App_Code文件夾給去掉了。

結果你一運行,問題就來了:

2012-05-19_221147

以上截圖的這個Web Application是從博客園園友梁逸晨一篇博客里面下載的。他原來提供的是一個Web Site,我在將這個Web Site轉換成Web Application的過程中發(fā)現了上述的問題。

回到上面的錯誤。它提示編譯器在調用一個方法的時候發(fā)現了兩個相同簽名方法,告訴你它不知道調用哪個。一般出現這個錯誤,主要是由于在同一個命名空間中出現了相同簽名的方法,但這樣的錯誤在你編譯項目的時候就會報錯,不會等到你運行的時候才報出來。

很自然的,我們會聯想到這個問題是由于ASP.NET運行時對App_Code文件夾的特殊處理而造成的。因為只有App_Code文件夾中的代碼到運行時才會被編譯,因此上面那個錯誤的大標題是"Compilation Error",而所有其他地方有錯誤的代碼在編譯時就會報錯。

讓我們去Temporary ASP.NET Files這個文件夾來看看究竟。這里存放的是ASP.NET在執(zhí)行期間所需的一些臨時文件。

2012-05-19_223728

打開上面這個以App_Code為前綴的cs文件,你會發(fā)現它和項目中的App_Code文件夾下的代碼文件是一樣的。然后我們打開assembly這個文件夾,會發(fā)現Web Application項目生成的DLL文件,我們使用Reflector打開看看:

2012-05-19_224137

你會發(fā)現這個DLL里面也包含了App_Code文件夾里面的代碼,因為我們剛才把它下面源文件的Build Action 改成了Compile,這樣就造成了重復的類和方法。

其實解決這個問題的方法很簡單,只要你將文件夾的名稱改成不是"App_Code"就行了,這樣ASP.NET運行時就不會對它有任何的特殊處理了。另外一個解決辦法是維持App_Code下的代碼文件的Build Action為Content,這樣的話生成的DLL中就不會包含它,但這會造成Visual Studio的智能感知不起作用,因為這些文件將不會被識別為代碼文件。

總之,微軟在Web Application中去掉這個App_Code這個特殊的文件夾顯然是有意為之。而我們程序員也不要自作聰明的為它加上,對網上的一些文章要抱著懷疑的態(tài)度來看待,一定要自己動手實踐。

原文鏈接:http://www.cnblogs.com/moneyriver2006/archive/2012/05/19/2509302.html

責任編輯:張偉 來源: 藍色漂流的博客
相關推薦

2009-07-20 16:45:41

使用StringBuiASP.NET

2009-08-05 15:39:57

文件夾權限設置

2009-07-30 12:19:32

ASP.NET中使用A

2009-05-05 14:02:14

PlaceHolder控件ASP.NET

2009-07-22 09:36:54

使用UpdataModASP.NET MVC

2009-07-29 09:53:24

ASP.NET異常管理

2009-07-21 17:27:12

UpdateProgrASP.NET AJA

2021-03-17 09:45:31

LazyCacheWindows

2021-02-02 16:19:08

Serilog日志框架

2021-02-06 21:40:13

SignalR通訊TypeScript

2021-03-10 09:40:43

LamarASP容器

2009-07-21 15:55:59

使用Web PartsASP.NET 2.0

2021-02-28 20:56:37

NCache緩存框架

2021-02-03 13:35:25

ASPweb程序

2021-01-28 22:39:35

LoggerMessa開源框架

2021-01-31 22:56:50

FromServiceASP

2021-03-03 22:37:16

MediatR中介者模式

2021-01-07 07:39:07

工具接口 Swagger

2009-01-03 08:41:51

Ajax無框架的AjaxASP.NET

2009-07-20 17:16:46

IIS中使用ASP.N
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国内精品一区二区 | 久久精品国产亚洲一区二区 | 亚洲视频免费在线看 | 国产成人av一区二区三区 | 亚洲午夜网 | 欧美成人精品一区二区男人看 | 精品欧美一区二区三区久久久 | 久久香蕉网 | 影音先锋成人资源 | 国产精品特级片 | 亚洲欧美激情国产综合久久久 | 欧洲亚洲精品久久久久 | 国产精品久久久免费 | 久草福利 | a网站在线观看 | 国产日日操 | 国产真实乱对白精彩久久小说 | 天天干天天操天天看 | 成人不卡视频 | 99热在线播放 | 久久香蕉网 | 国产日韩一区 | 在线免费激情视频 | 欧美在线小视频 | 91大神xh98xh系列全部 | 国产一区二区在线免费观看 | 欧美日韩三区 | 九九久久精品 | 男女视频在线免费观看 | 国产精品99久久久久久大便 | 国产999精品久久久久久 | 欧美精品二区 | 婷婷二区| 国产在线观看不卡一区二区三区 | 久久精品a| 中文字幕一区二区在线观看 | 精品视频一区二区在线观看 | 免费1区2区3区 | 美女在线视频一区二区三区 | 国产精品不卡一区二区三区 | 亚洲精品一区在线观看 |