2009-03-02 24 views
35

我有一個使用「發佈網站」發佈的VS 2005網站,並清除了所有三個複選框。我也有一個部署項目,可以獲取發佈的文件並創建一個MSI。然後我將該軟件包安裝在單獨的測試服務器上。如何解決ASP.NET錯誤「文件'nnn.aspx'未被預編譯,無法請求。」?

換句話說,整個網站是預編譯的。然而,當我去到一個名爲「服務」的具體子文件夾的任何.aspx文件,我得到一個HttpException:

System.Web.HttpException:文件「/myapp/Services/mypage.aspx」還沒有已經被預編譯,並且不能被請求。

如果我轉到其他文件夾中的.aspx文件,無論是根文件夾還是其他子文件夾,它都可以正常工作。

mypage.aspx本身的內容是:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="mypage.aspx.cs" Inherits="Services_mypage" %>"

/myapp/bin文件夾,我可以看到一個mypage.aspx.989dc2fb.compiled文件。這個內容似乎指向一個特定的程序集,它也存在於bin文件夾中。

爲什麼會發生此錯誤? .compiled文件在那裏,程序集在那裏,問題中的類型出現在該程序集中(我可以在對象瀏覽器中看到它)。是否有關.compiled文件的名稱或內容?不知何故,我有錯版嗎? .compiled文件名中的表面上的隨機數是什麼意思,它是重要的?

我也想提一提,這個問題突然出現,我不知道什麼樣的變化有可能因爲前幾天正常工作已經完成(但據我所知,沒有的)。

回答

20

我已經沒有這個錯誤,但我通過這一連接傳來的是一個谷歌搜索後,我不知道,如果你看過它尚未:http://forums.asp.net/t/956297.aspx

編輯(添加鍵文本):

當在web.config中指定引用並且部署文件夾/站點不包含安裝在系統或bin文件夾中的這些DLL不包含它們(如果它們是私有程序集)時,將出現此錯誤。 例如:(添加組件=「Namespace1.NameSpace2,版本= XXXX,文化=中性公鑰= 31bf3856ad364e35」 /) 如果你的web.config中包含的任何組件這樣和部署服務器亙古不變的垃圾桶或GAC包含這些assembiles,那麼這個錯誤就會發生。

人們報告說,在目標服務器上丟失的程序集最終成爲根本原因,在他們的情況下,但它們與您具有相同的錯誤。奇怪的。

也許這就是問題所在?

+0

+1爲缺少的程序集提示(在我的情況下,一些程序集已從GAC中刪除) – 2010-09-07 08:18:39

+0

+1也提示我。原來我們有一個缺失的控制組件。 – 2012-06-19 09:50:35

+2

對我而言略有不同,但同樣的dll主題。我有一個項目A,它生成了一個dll,其中包含一些在項目B中使用的預編譯的用戶控件。這兩個項目都使用Telerik RadControls,但使用了不同的版本。項目B中未使用A控件的頁面發揮作用,這些頁面提供了有關版本不匹配的適當消息。然後B中的.asmx服務給了非預先編譯的消息非常無益的幫助。同步版本修復了這一切。 – Piwaf 2012-12-21 18:22:17

3

原來是在MSI,我以爲是使用的頁面,說明出錯丟失(非Web)DLL。一個相當誤導性的錯誤信息我會說,因爲該頁面當然是預編譯的,但有一個缺少對該DLL的引用。

+1

誤導性的錯誤消息可能會非常討厭浪費開發人員的時間 – Axarydax 2011-01-28 08:53:00

2

今天我有同樣的問題。一些論壇告訴你在你的網站中缺少參考,它確實在你的情況下。儘管你已經包含了所有必要的程序集,但你可能已經將你的網站部署在一個帶有3.5框架的IIS服務器上了,對吧?

嗯,這是我的情況,所以我複製了原始ASPX 3.5網站的web.config文件,並修改了一些部分(刪除了其他3.5程序集引用)並嘗試再次部署。

0

當我對現有網站進行了一些更改時,我正面臨着這個問題。

要從問題中恢復,我從bin文件夾中刪除了所有文件並重新部署了它們。

然後問題就解決了。

我希望這可能會有所幫助。

0

重新部署相同的文件也解決了這個問題在我的情況。

所以也許嘗試別的第一次嘗試應用重新部署在你面前(bin文件夾中的內容應足夠)

BTW:對我來說,當C盤空間用完開始的誤差。

快樂編碼! ChiTec

0

如果在運行MSBuild腳本時出現此錯誤,則可能是您的項目是2.0或3.5項目,並且MSBuild正在使用4.0編譯器。嘗試將TargetFrameworkMoniker =「3.5」添加到您的AspNetCompiler指令中。

17

正如所有上述答案的腳註,通過重新發布替換缺少的程序集來解決問題......雖然之前我用​​相同的解決方案解決了此問題,但我剛剛遇到了另一個原因,可能會幫助他人。

我的網站運行的應用程序池有它的「啓用32位應用程序」設置設置爲false。通過應用程序池的「高級設置」對話框將其更改爲true,我解決了我的問題。

希望能幫助其他一些糟糕的吸盤。

1

我知道錯誤是抱怨別的東西,但我承諾在我的情況下,問題只是訪問權限不足(網絡服務或應用程序池身份或IUSR)的asp.net帳戶與該特定文件。

這是由於異常部署和混合bin文件與我們的VPS環境中新發布的文件。

解決

該特定文件權限,需要用正確的Bin文件夾權限,像其他文件,這些文件(和WO該錯誤)內賓正常工作所取代。

enter image description here

15

當我升級的站點從2.0到4.0,我得到這個錯誤。該錯誤是由該站點的root目錄中的文件PrecompiledApp.config造成的。一旦我刪除該文件,該網站開始工作。

5

發生了這個錯誤,我解決了它。

當你想發佈您的網站時,請使用固定命名和單頁組件在Visual Studio

你會看到這個問題將得到解決!

2

我們在嘗試了幾種其他解決方案之後,通過重新啓動AppPool來解決此問題。在這種情況下重新發布不是一種選擇。

0

在我的情況下,我沒有上傳像AjaxControlToolkit.dll,Telerik.dll等常見DLL 我上傳了整個發佈的文件夾,它爲我修復了它。

0

在更新的情況下,然後重新編譯。再次從bin文件夾複製所有文件,並從各自的文件夾更新特定文件。

0

在我的asp.net mvc剃刀視圖(.cshtml)錯誤的情況下,/ bin文件夾包含兩個.compiled文件,用於同一視圖。其中一個是舊的,需要刪除。

我在控制器視圖子文件夾中也有第二個視圖,它也需要刪除。

問題的原因是我將控制器視圖子文件夾中的視圖移到了共享文件夾中,但是我的部署過程(Visual Studio發佈)並未從服務器中刪除過時視圖和view.compiled文件。您可以指示Visual Studio始終清理目標文件夾,但這會使部署過程變慢。

0

首先檢查可用光盤空間。當我們在託管IIS的硬盤上的空間不足時出現此錯誤。

7

過去幾天我一直在努力解決這個問題。至少在我的情況下,錯誤信息完全是誤導性的,與預編譯的網站無關。那裏有很多文章或帖子給出了許多不同的答案,這隻會增加混淆。我個人認爲這個錯誤主要是由於缺少引用或不正確的版本。爲了儘可能快地解決問題,您必須排除此問題,或者修復缺失/錯誤的引用。

爲此,您需要使用名爲「Assembly Binding Log Viewer」的工具。這個工具會告訴你哪些引用丟失或有錯誤的版本。如果有缺失/不匹配的參考,請繼續並修復它;否則你需要做其他的魔術,比如檢查32位的App Pool或者權限。

步驟:

  1. 在你的服務器上創建以下文件夾

    C:\ fuslog C:\ fuslog \日誌

  2. 複製大會綁定日誌查看到您的服務器位於C :\ fuslog:

    你可以在這樣的位置中找到程序

    C:\ Program Files文件(x86)的\微軟的SDK \的Windows \ v7.0A \ BIN \ fuslogvw.exe

    你可能需要看看 「程序文件」,而不是 「程序文件(x86)」 或者看看不同的氣質而不是「v7」。0A」

  3. 在服務器執行fuslogvw.exe

  4. 點擊 「設置...」

  5. 確保 「登錄失敗綁定到磁盤」 被選中

  6. 檢查啓用自定義日誌路徑,並在框中輸入以下內容:C:\ fuslog \日誌

  7. 點擊OK

  8. 回收/重置您的應用程序池以強制執行新的綁定

  9. 單擊刷新。現在您可以在此處看到失敗的綁定

  10. 找到確切綁定的更好方法是轉到c:\ fuslog \ logs \ Default。在這裏你可以找到確切的綁定失敗。有些是無關緊要的,你需要通過反覆試驗找到關鍵問題。我的是這樣的失敗:

    System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
    

我通過我的網站添加以下項解決了該問題的web.config:

<configuration> 
    ... 
    <runtime> 
     ... 
     <!-- Added this entry to fix the issue --> 
     <dependentAssembly> 
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
      <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.0" /> 
     </dependentAssembly> 
     ... 
    </runtime> 
    ... 
</configuration> 

我希望這可以幫助別人迅速解決問題。

0

最後,我發現了這個問題。如果您使用像我這樣的MVC框架,請更新您的MVC版本。在我的情況下,我將MVC 4.0.0.0更改爲4.0.0.1,並將所有項目引用的「本地副本」屬性都設置爲「True」。之後,我的問題解決了。請檢查所有配置文件(4.0.0.0-> 4.0.0.1)中的MVC版本

並注意asp編譯器警告消息。

0

這個選項解決了我的問題。基本上,它會刪除先前部署後留下的每個孤立文件。

Remove additional files at destination

0

我有同樣的問題,當我開始使用VWD快遞2012(我用的是快遞在2010年以後,其用來工作沒關係) 去了我的主機控制面板,並從2.0改爲ASP.NET版本如圖所示 - 經典到4.0經典。問題沒有了。

0

對於我來說,我有這樣的刪除生產文件夾,然後拷貝最多的新文件的腳本。

該腳本未能正確刪除生產文件夾,而是將新舊文件混合在一起導致錯誤。

我手動刪除整個文件夾併成功重新部署...然後更新腳本。

0

如果您在bin中包含一個.compiled文件,並且該文件不再是您的項目的一部分,也會發生此錯誤。本質上,您將收到此代替404。刪除.compiled文件,然後你得到404。

1

我遇到了同樣的問題。我的問題是固定在這個地圖中刪除臨時文件asp.net文件夾中的文件:

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root 
0

在「nnn.aspx.xxxxxxxx.compiled」由WebDeploy刪除文件,因爲我跑了2個同步我的情況在同一個Jenkins工作區中工作。第二個作業在創建WebDeploy包期間刪除了一些文件。

相關問題