2013-11-03 69 views
1

我的本地版本的代碼運行得很好。但是,當我做了網絡部署,我收到以下異常:DotNetOpenAuth導致無法加載Assembly System.Web.WebPages.Razor

無法加載文件或程序集「System.Web.WebPages.Razor,版本= 2.0.0.0,文化=中性公鑰= 31bf3856ad364e35」或它的一個依賴。定位的程序集清單定義與程序集引用不匹配。 (從HRESULT異常:0x80131040)

相關堆棧跟蹤線是

[FileLoadException:未能加載文件或程序集「System.Web.WebPages.Razor,版本= 2.0.0.0,文化=中立,PublicKeyToken = 31bf3856ad364e35'或其依賴項之一。定位的程序集清單定義與程序集引用不匹配。 (異常來自HRESULT:0x80131040)] Microsoft.Web.WebPages.OAuth.PreApplicationStartCode.Start()+0

這似乎是相關的事實是,NuGet包Razor的是3.0版,但DotNetOpenAuth軟件包使用版本2.0

另外這個問題只發生在我部署到我的Azure網站時。 (我目前使用免費網站,而不是webrole/workrole的東西)。我使用webdeploy,它在以前的版本中工作正常,但我相信這與nuget軟件包有關。

更新: 我無法解決此問題。我試圖通過FTP部署,在部署之前刪除整個文件夾,但這也不起作用。 Nuget一直是一場噩夢。

+0

看看這個http://stackoverflow.com/questions/19741860/cannot-utilize-simplemembership-features-when-hosting-on-azure – WannaCSharp

+0

我看到那篇文章,我添加了一切都是本地複製真實。但是我在這裏看到的這個問題是,一個包(Open Auth)引用了剃刀dll的第2版,而我從mvc項目獲得了剃刀dll的第3版。 – DanScan

+0

@DanScan - 不確定你是否仍然有這個問題,但遲到的評論使我重新訪問我的文章,並添加了一些額外的信息。 – Tommy

回答

3

將其放置在您的web.config文件中。它會導致框架將依賴關係重定向到適當的版本。從未來

當我重新審視這個職位,因爲一個XML錯誤,在上述語法指出

<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
    <configuration> 

編輯,也有最有可能需要更新,以及其他一些地方。首先,在主web.config中,這條線應該在<appSettings>部改變爲如下

<appSettings> 
    <add key="webpages:Version" value="3.0.0.0" /> 

此外,還有在視圖文件夾一個web.config應該更新以下

<configSections> 
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
     <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 
     <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 

基本上,你想確定所有提到剃鬚刀2.0.0.0的地方,除了彙編重定向之外,還要把它們改成3.0.0.0。我相信我擁有上述所有的位置。

如果您更新整個MVC框架,還需要執行額外的工作,但這不是問題的基礎。

+1

我試過了。它也打破了本地版本。我也嘗試過不同地點的這個價值,但沒有運氣。我堅信這與OAuth尋找版本2有關,但MVC軟件包使用Razor軟件包的第3版。 – DanScan

+0

根據MSDN 應該是的一個子元素,所以我不認爲它應該放在元素中。請參閱http://msdn.microsoft.com/en-us/library/twy1dw1e%28v=vs.110%29.aspx。但我有同樣的問題,這並沒有解決它:-( – Appetere

+0

@Steve - 感謝您的更新,我已經修復了我的代碼 – Tommy

2

我有同樣的問題。我正在部署到之前部署過MVC4應用的Azure網站。我通過「在目的地移除其他文件」來修復它。

右鍵單擊項目 - >發佈 - >設置 - >展開文件發佈選項 - >選中刪除目的地的其他文件。

+0

解決方案(雖然不是真正的答案)是刪除最新版本的nuget MVC,然後從命令行加載適當的版本OAuth包需要不同版本的剃鬚刀然後被MVC軟件包加載。 – DanScan

0

我使用Git部署並遇到同樣的問題。我沒有看到可以在目的地刪除其他文件的選項。

我使用FTP連接到Azure主機,然後刪除/site/wwwroot目錄中的所有內容。然後,我使用管理門戶,部署選項卡,最後使用Sync命令(即重新部署)並解決了問題。

相關問題