2010-04-22 352 views
9

將Hybrid ASP.NET MVC1應用程序轉換爲MVC2後,當我嘗試運行應用程序時出現以下錯誤:命名空間'System.Web'中不存在類型或命名空間名稱'Mvc'

類型或命名空間名稱「的mvc」不存在命名空間「System.Web程序」存在(?是否缺少程序集引用)

在Web.config文件中的allegeded罪魁禍首是System.Web.Mvc:

<namespaces> 
    <add namespace="System.Web.Mvc"/> 
    <add namespace="System.Web.Mvc.Ajax"/> 
    <add namespace="System.Web.Mvc.Html"/> 

到目前爲止,我的調查似乎讓我相信版本2 o f System.Web.Mvc未安裝或未被拾取。

我試着創建一個基於MVC 2的文件>新項目,這是撿起新的(v2)版本的MVC。我也轉換了一些其他項目(不是混合),他們沒有問題轉換爲MVC2。

我也卸載了MVC1,嘗試從GAC中刪除對它的引用。但是,這一切都沒有奏效。

任何想法?

回答

9

請確保您有綁定重定向在你的web.config:

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

這迫使MVC 2即使MVC 1是在機器上。

另外:MVC 1確實有System.Web.Mvc命名空間,所以一定要確保你也有:

<assemblies> 
    <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
+7

這是你的第二個建議,即在組件下明確聲明System.Web.Mvc命名空間。謝謝克雷格 - 讚賞! – Guy 2010-04-22 15:37:52

2

我碰到的財產以後來到相似,解決辦法是改變參考Microsoft.Web.Mvc所以本地複製被設置爲True。

0

我有相同的錯誤,並單擊頁面中詳細的編譯錯誤鏈接顯示問題與System.Web.Helpers,.Http,.WebPages

備份系統後,我運行update-package -reinstall'並強制卸載/重新安裝所有軟件包。這迫使web.config文件被正確地重建,dependentAssembly部分構建正確。

重建解決方案後,它首次運行。

請注意,它確實在web.config中添加了以下錯誤providers部分。

<contexts> 
    <context type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
</contexts> 
<providers> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
</providers> 

這隻能產生生成警告,但我確實有利於前述contexts元素將其刪除。

相關問題