2013-01-04 27 views
1

我正在嘗試將我的ASP.Net MVC4應用程序部署到Azure,但它在部署期間崩潰。顯然這是因爲某些程序正在請求程序集'System.Web.Mvc,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'。這一切都在本地完美運行,並且對於調試Azure來說是一場噩夢,因爲部署需要25-30分鐘。如何找出爲什麼在ASP.Net MVC4項目中需要程序集?

我原以爲我已經配置了CLR不要求MVC3即使一些想它使用:

 <dependentAssembly> 
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
      <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
     </dependentAssembly> 

如果我看ObjectBrowser似乎沒有什麼可以要求MVC3。找出什麼是要求它的最好方法是什麼?項目中有各種Nuget包。我想其中之一是要求MVC3?無論如何看到所有依賴關係列表等?

我得到:

CLR異常類型:「無法加載請求的類型中的一種或多種檢索有關更多信息, LoaderExceptions財產」 System.Reflection.ReflectionTypeLoadException Microsoft.WindowsAzure.ServiceRuntime嚴重:201:ModLoad: 000007fc 906a0000 000007fc 907a9000
d:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \ diasymreader.dll角色 入口點無法創建:System.TypeLoadException:無法 由於以下例外情況加載角色入口點: - System.IO.FileLoadException:無法加載文件或程序集「System.Web.Mvc,Version = 3.0.0.0,Culture = neutral, PublicKeyToken = 31bf3856ad364e35」或它的一個依賴。位於程序集清單定義中的 與程序集 的引用不匹配。 (從HRESULT異常:0x80131040)文件名: 'System.Web.Mvc,版本= 3.0.0.0,文化=中性 公鑰= 31bf3856ad364e35'

WRN:集綁定日誌記錄被關閉。要啓用程序集綁定 故障日誌記錄,請將註冊表值 [HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)設置爲1.注意:有 會造成與程序集綁定失敗 日誌記錄相關的一些性能損失。要關閉此功能,請刪除註冊表值 [HKLM \ Software \ Microsoft \ Fusion!EnableLog]。

---> System.Reflection.ReflectionTypeLoadException:無法加載一個或多個請求的類型。檢索LoaderExceptions屬性 以獲取更多信息。在 System.Reflection.RuntimeModule.GetTypes(RuntimeModule模塊)處 System.Reflection.Assembly.GetTypes() System.Reflection.RuntimeModule.GetTypes()在 Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetRoleEntryPoint(大會 entryPointAssembly )---內部異常堆棧跟蹤的結尾---
處 微軟在 Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.CreateRoleEntryPoint(角色類型 roleTypeEnum Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetRoleEntryPoint(大會 entryPointAssembly)) .WindowsAzure.ServiceRuntime.RoleEnvironment。InitializeRoleInternal(角色類型 roleTypeEnum)ModLoad:000007fc a2f00000 000007fc a2f96000
d:\ WINDOWS \ SYSTEM32 \ clbcatq.dll的NTDLL ZwTerminateProcess +是0xA: 000007fc`a2fa2eaa C3 RET

Exception object: 00000000017e0070 Exception type: System.TypeLoadException Message:   Unable to load the role 
- System.IO.FileLoadException:由於下列異常

切入點無法加載文件或程序集「System.Web.Mvc,版本= 3.0.0.0,文化=中立, P ublicKeyToken = 31bf3856ad364e35'或它的一個依賴關係。該 位於集清單定義不匹配裝配 參考。 (從HRESULT異常:0x80131040)文件名: 'System.Web.Mvc,版本= 3.0.0.0,文化=中性 公鑰= 31bf3856ad364e35'

WRN:集綁定日誌記錄被關閉。要啓用程序集綁定 故障日誌記錄,請將註冊表值 [HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)設置爲1.注意:有 會造成與程序集綁定失敗 日誌記錄相關的一些性能損失。要關閉此功能,刪除註冊表值 [HKLM \ SOFTWARE \微軟\融合!EnableLog。

InnerException:System.Reflection.ReflectionTypeLoadException,使用 !PrintException 00000000017dcf08查看更多。堆棧跟蹤(產生): StackTraceString:HRESULT:80131522

+1

順便說一句 - 你真的應該看看使用Azure的網站通過到位桶或TFS部署Git的部署 - 我有同樣的噩夢部署時間 - 一分鐘之內發生,如果你使用的網站:http://www.windowsazure.com/en-us/develop/net/common-tasks/publishing-with-git/ – levelnis

+0

是的,我正在考慮的網站,而不是Web角色。然而,主要問題是我們的通信是什麼造成了延遲。我們在接下來的幾周內獲得新的高速通信,所以應該改進。肯定會更多地考慮持續部署的想法等,並希望能夠達到目標。 – GraemeMiller

回答

1

您可以使用反射來加載的NuGet軟件包,看看它們的依賴關係。應該很容易找出是否依賴於MVC3。你的程序集綁定看起來不錯。你的解決方案中是否有多個項目?其中一個可能會依賴於依賴於MVC3的Nuget包嗎?

這篇文章可能會有幫助:How can I build a 'dependency tree diagram' from my .NET solution

+0

是啊,多個項目。但它似乎是網絡項目。如果我將其刪除並替換爲一個乾淨的MVC4項目,該項目引用了我的域和基礎架構項目,它將完美部署。 – GraemeMiller

+1

也許很快是值得註冊爲網站,這樣你可以得到這個問題的固定用更短的部署時間?之後您可以隨時存入帳戶。您可能需要逐個刪除每個Nuget包,直到找到罪魁禍首。這對網站來說會很痛苦! – levelnis

+0

可能是一個想法,現在就嘗試。 NDepend顯示了10件事情需要MVC。然而,似乎沒有任何跡象表明它是必需的MVC3。這是一個對我來說都很新的領域。我的bindingRedirect應該阻止應用程序要求特定版本的MVC嗎? – GraemeMiller

相關問題