溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ASP.NET中App_Code文件夾出現(xiàn)異常如何解決

發(fā)布時(shí)間:2021-07-16 11:39:21 來源:億速云 閱讀:375 作者:Leah 欄目:編程語言

本篇文章為大家展示了ASP.NET中App_Code文件夾出現(xiàn)異常如何解決,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

新建一個(gè)Web Site的操作如下:

ASP.NET中App_Code文件夾出現(xiàn)異常如何解決

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

ASP.NET中App_Code文件夾出現(xiàn)異常如何解決

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

ASP.NET中App_Code文件夾出現(xiàn)異常如何解決

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

ASP.NET中App_Code文件夾出現(xiàn)異常如何解決

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

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

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

ASP.NET中App_Code文件夾出現(xiàn)異常如何解決

于是乎,你去Google或Baidu一下,那些文章就會(huì)告訴你讓你手動(dòng)添加一個(gè)名為"App_Code"的文件夾。于是你也照做了,也發(fā)現(xiàn)Visual Studio也確實(shí)識(shí)別了該文件夾,因?yàn)樗膱D標(biāo)和在Web Site中的一樣了:

ASP.NET中App_Code文件夾出現(xiàn)異常如何解決

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

ASP.NET中App_Code文件夾出現(xiàn)異常如何解決

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

結(jié)果你一運(yùn)行,問題就來了:

ASP.NET中App_Code文件夾出現(xiàn)異常如何解決

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

回到上面的錯(cuò)誤。它提示編譯器在調(diào)用一個(gè)方法的時(shí)候發(fā)現(xiàn)了兩個(gè)相同簽名方法,告訴你它不知道調(diào)用哪個(gè)。一般出現(xiàn)這個(gè)錯(cuò)誤,主要是由于在同一個(gè)命名空間中出現(xiàn)了相同簽名的方法,但這樣的錯(cuò)誤在你編譯項(xiàng)目的時(shí)候就會(huì)報(bào)錯(cuò),不會(huì)等到你運(yùn)行的時(shí)候才報(bào)出來。

很自然的,我們會(huì)聯(lián)想到這個(gè)問題是由于ASP.NET運(yùn)行時(shí)對(duì)App_Code文件夾的特殊處理而造成的。因?yàn)橹挥蠥pp_Code文件夾中的代碼到運(yùn)行時(shí)才會(huì)被編譯,因此上面那個(gè)錯(cuò)誤的大標(biāo)題是"Compilation Error",而所有其他地方有錯(cuò)誤的代碼在編譯時(shí)就會(huì)報(bào)錯(cuò)。

讓我們?nèi)emporary ASP.NET Files這個(gè)文件夾來看看究竟。這里存放的是ASP.NET在執(zhí)行期間所需的一些臨時(shí)文件。

ASP.NET中App_Code文件夾出現(xiàn)異常如何解決

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

ASP.NET中App_Code文件夾出現(xiàn)異常如何解決

你會(huì)發(fā)現(xiàn)這個(gè)DLL里面也包含了App_Code文件夾里面的代碼,因?yàn)槲覀儎偛虐阉旅嬖次募腂uild Action 改成了Compile,這樣就造成了重復(fù)的類和方法。

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

上述內(nèi)容就是ASP.NET中App_Code文件夾出現(xiàn)異常如何解決,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI