InvalidCastException, ASP.NET MVC 4 Beta yüklendikten sonra atılır


81

ASP.NET MVC 3 ile bir makineye ASP.NET MVC 4 Beta yükledikten sonra aşağıdaki istisnayı alıyorum.

System.InvalidCastException kullanıcı kodu tarafından işlenmedi Message = [A] System.Web.WebPages.Razor.Configuration.HostSection, [B] System.Web.WebPages.Razor.Configuration.HostSection'a dönüştürülemiyor. Tür A, 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System konumunda' Varsayılan 'bağlamında' System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = nötr, PublicKeyToken = 31bf3856ad364e35 'kaynağından kaynaklanır .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Tip B, 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System konumunda' Varsayılan 'bağlamında' System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = nötr, PublicKeyToken = 31bf3856ad364e35 'kaynağından kaynaklanır .Web.WebPages.Razor \ v4.0_2.0.0. 0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Kaynak = System.Web.WebPages.Razor

Yığın izleme:

System.Web.WebPages.Razor.WebRazorHostFactory. System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode () şirketinde System.Web.WebPages.Razor.RazorBuildProvider.CreateHost (), System.Web.WebPages.Webompilation. System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders () at System.Web.Compilation.BuildProvidersCompiler.PerformBuild () at System.Web.Compilation.BuildManager'da GetCompilerTypeFromBuildProvider (BuildProvider buildProvider).CompileWebFile (VirtualPath virtualPath at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal (VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean sureIsUpTes System.Web.Compilation.BuildManager.GetVPathBuildResultInternal) , Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean sureIsUpToDate) System.Web.Compilation.BuildManager. System.Web.Mvc.BuildManagerViewEngine adresinde Web.Mvc.IBuildManager.FileExists (String virtualPath).System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName'de FileExists (ControllerContext controllerContext, String virtualPath) System.Web adresinde (ControllerContext controllerContext, List`1 lokasyonları, String adı, String controllerName, String alanAdı, String cacheKey, String [] ve arananLocations). Mvc.VirtualPathProviderViewEngine.GetPath (ControllerContext controllerContext, String [] konumları, String [] alanLokasyonları, Dize konumlarıPropertyName, Dize adı, Dize denetleyiciAdı, Dize cacheKeyPrefix, Boolean useCache, String [] & searchedLocations) System.Web.Mvc.VirtualPathPathPath (ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) System.Web.Mvc.ViewEngineCollection. <> C__DisplayClassc.System.Web.Mvc.ViewEngineCollection.Find (Func`2 arama, Boolean trackSearchedPaths) at System.Web.Mvc.ViewEngineCollection.FindView (ControllerContext controllerContext, String viewName, String masterName) System.Web.Mvc adresinde b__b (IViewEngine e) System. System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (IResultFilter filtresi, ResultExecutingContext preContext, Func`1 devamı) at System.Web.Mvc.ControllerActionInvoker1c <. c__DisplayClass1c.b__19 () <.> System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters'da (ControllerContext controllerContext, IList`1 filtreleri, ActionResult actionResult) System.Web.Mvc.ControllerAction.Webtext denetleyicisinde (. Mvc.Controller.ExecuteCore (), [project_namespace] .Controllers.GlobalizationController.ExecuteCore (), System.Web.Mvc.ControllerBase.Execute (RequestContext requestContext), System.Web.Mvc.ControllerBase.System.Web. System.Web.Mvc.MvcHandler'da Mvc.IController.Execute (RequestContext requestContext). <> C__DisplayClass6. <> C__DisplayClassb.b__5 () at System.Web.Mvc.Async.AsyncResultWrapper. <> C__DisplayClass1.b__0 Web.Mvc.Async.AsyncResultWrapper. <> C__DisplayClass8`1.b__7 (IAsyncResult _) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End () at System.Web.Mvc.MvcHandler. <> C__DisplayClasse. System.Web.Mvc.SecurityUtil.b__0 (Eylem f) System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Eylem eylemi) System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult), System.Web.Mvc.MvcHandler. System.Web.IHttpAsyncHandler.EndProcessRequest (IAsyncResult sonucu) System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.System.Web.Mvc.MvcHandler'da Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End (). <> C__DisplayClasse.b__d () at System.Web.Mvc.SecurityUtil.b__0 (Action f) System.Web. System. CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () at System.Web.HttpApplication.ExecuteStep (IExecutionStep step, Boolean & completeSynchronously)System.Web.Mvc.MvcHandler'da Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End (). <> C__DisplayClasse.b__d () at System.Web.Mvc.SecurityUtil.b__0 (Action f) System.Web. System. CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () at System.Web.HttpApplication.ExecuteStep (IExecutionStep step, Boolean & completeSynchronously)System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Action eylem) at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHand'de b__0 (Action f) System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Eylem eylemi) System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHand adresindeki b__0 (Action f) System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.System.Web.HttpApplication.ExecuteStep adresinde HttpApplication.IExecutionStep.Execute () (IExecutionStep step, Boolean & completeSynchronously)System.Web.HttpApplication.ExecuteStep adresinde HttpApplication.IExecutionStep.Execute () (IExecutionStep step, Boolean & completeSynchronously)

Bu beni tamamen engelledi ve betayı korumak istesem de istisnadan kurtulmak için onu tamamen kaldırmam gerekebilir.


1
Herhangi bir şans eseri .net 4.5 Dev önizleme çalıştırıyor musunuz? (Şu anki Beta Sürümü ile uyumlu değil) (sadece kayıt için, olumsuz oy veren ben değildim, soru meşru)
Michael Stum

1
Hayır, 4.5'i hiç çalıştırmıyorum.
Nikos Baxevanis

3
Cidden, bu neden reddedildi? Başkalarının başına gelebilecek bir şey için geri bildirim sağlıyorum.
Nikos Baxevanis

@MichaelStum Tamam endişelenme. :)
Nikos Baxevanis

Karışıklık için özür dilerim. Bu soruyu "favorilere eklemeye" çalışıyordum ve yanlış tıkladım = P Olumsuz oy kaldırıldı, favori bu sefer doğru şekilde eklendi.
Josh Darnell

Yanıtlar:


31

Aşağıdakileri web.config dosyanıza eklemeyi deneyin:

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

Sorun, birden çok derleme sağlayıcısının kayıtlı olması ve en son kazanan olmasından kaynaklanıyor olabilir.


101

Aynı problemi yaşadım, ancak ASP.NET MVC 3'ü ASP.NET MVC 4'e geçirirken bu konuya girdim. Soruna bir çözüm buldum ama kaynağı farklı, WebPagessürümden değil .

Bir ASP.NET MVC 3 Projesini ASP.NET MVC 4'e Yükseltmek için resmi kılavuzu ( tabiri caizse ) takip ettim .

Sorunu çözmek için Web.Config'i eklemeniz gerekir (muhtemelen daha önce eklenenlerin etrafına):

<runtime><!-- Should be there by default, near end -->
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><!-- Should be there by default -->
    <dependentAssembly>..</dependentAssembly><!-- Should be there by default -->
        ... some other dependecy redirects ...

    <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages.Razor"
            publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
    </dependentAssembly>

        ... some other dependency redirects ...
    </assemblyBinding>
</runtime>

Ayrıca notlarda System.Web.Helpers Referansının 1.0.0.0'dan 2.0.0.0'a değiştirilmesinden bahsedilmemiştir (yenisini silin ve ekleyin).


2
+1 Paylaştığın için teşekkürler. Yaptığım küçük bir değişiklik, oldVersion="1.0.0.0-2.0.0.0"yalnızca MVC4 proje şablonunda kullanılan kuralı takip etmek için kullanmaktı . İlginç bir şekilde dependentAssemblyfor System.Web.WebPages.Razor, MVC4 proje şablonundaki kök Web.config dosyasında da yoktur .
Scotty.NET

1
MVC 4 NuGet paketlerini oldVersion="2.0.0.0" newVersion="3.0.0.0"
5.1.1'e

34

Oldukça geç bir çözüm daha ... Aynı problemle karşılaştım. Burada listelenen tüm düzeltmeleri yaptınız (Hepinize Teşekkürler !!!) ancak hatayı geçemedim. Son olarak, çaresizlik içinde, Görünümler dizininde bir web.config dosyası buldum. Bu dosyada, System.Web.Mvc sürümüne yönelik birkaç referans buldum ve hepsini "4.0.0.0" değerine yükselttim. Daha da önemlisi, aşağıdaki satırları buldum ve "system.web.webPages.Razor" için sürüm numaralarını "1.0.0.0" dan "2.0.0.0" a güncelledim ve bir anda her şey bir kez daha çalışmaya başladı. Umarım bu başka birine yardımcı olur.

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

Ahmet G.


1
Ayrıca, Alanlar kullanıyorsanız, Alanlar / Görünümler altındaki web.config'i de unutmayın.
Antonin Jelinek

5

Bunu çalıştırmanın başka bir yolunu buldum, MVC 2'den MVC 3'e yükseltme konusunda Tayvanlı bir blog satırında: http://blog.kkbruce.net/2011_04_01_archive.html (Aslında görmek için IE10'da Microsoft Translate'i kullanabilirsiniz. İngilizce versiyonu ve oldukça iyi bir çeviridir ...)

İşin püf noktası, MVC3 ile ilgili tüm sürümleri bulmaktır (Razor, Mvc, Yardımcı derlemeler gibi, referanslarınıza giderseniz ve referans alınan derlemenizin tüm yeni sürümlerini kontrol ederseniz ne olduklarını bilirsiniz) ve bunları 1.0.0.0 - 2.0.0.0 ve 3.0.0.0 - 4.0.0.0 arası (genel anahtarlar aynı olduğu için). Ayrıca, sürümleri bloga göre kaldırmayı deneyebilirsiniz.

Bir diğer önemli şey de bu ayarların tüm Web.Config'lerde olmasıdır. Bu nedenle, yalnızca kökünüz altında değil, aynı zamanda Görünüm, Alan / {Alan} / Görünüm vb. Altında da.

Bu çözümün benim için işe yaramayan bir hibrit yerine tamamen MVC4'e yükseltme yapmanıza izin verebileceğini düşünüyorum.


4
  1. Visual Studio'da, bir yerde ayrı bir klasörde yeni bir "atılabilir" ASP.NET MVC 4 Uygulaması oluşturun.
  2. Views klasörünüzdeki web.config dosyasını, yeni atılan uygulamadan yeni oluşturulmuş Views web.config dosyasıyla değiştirin.

Fark edeceksiniz:

System.Web.WebPages.Razorden değişir Version=1.0.0.0için Version=2.0.0.0 System.Web.Mvcdeğişikliklerden Version=3.0.0.0içinVersion=4.0.0.0


3

Bu sorunu yaşıyorsanız ve yukarıdaki çözümleri denediyseniz ve bu işe yaramazsa, lütfen Görünümler klasörünüzdeki web.config dosyasını kontrol edin. Uygulama kök klasörünüzdeki Web.config dosyasıyla çakışan bazı yapılandırmalar olabilir.


0

Kodunuzun bir kısmı mevcut MVC bitleri üzerinde çalışırken, diğerleri yenisine gönderilmiştir. Kodu anlamadan, soruna hangi bitin neden olduğunu söyleyemem.

Bunu söyledikten sonra, bir üretim geliştirme makinesinde asla bir beta kurmam. Bugünlerde bir sanal makine oluşturmak ve betayı bir görüntü üzerinde çalıştırmak çok kolay. Windows 7+ 'de, ihtiyacınız olursa görüntüyü metalden başlatabilir ve mükemmel vuruş yapamazsınız (dev tool betaları ile sık sık yaparsınız).


Evet, ancak bu Beta'nın canlı yayın lisansı var. Sonuçta, bu zaten bir
sanal makinede

Çatışmanın yaşandığı yer olduğu için, 4'te 3'teki hangi bitin çalıştığını belirlemeniz gerekir. Aynısı, Web Formlarında .NET 2 zaman çerçevesine geçerken oldukça fazla oldu ve herhangi bir eklentiyle (MVC gibi?)
Gregory A Beamer

Aslında çok büyük bir ASP.NET MVC 3 projesi. 4'te hiçbir şey çalışmıyor. 3 projesine başlayamadım hepsi bu. AppSettings öğesine <add key = "webpages: Version" value = "1.0.0.0" /> eklemek sorunu çözdü.
Nikos Baxevanis

0

Bütünlüğü uğruna...

Ayrıca kullanmıyorsanız web sayfalarını tamamen kapatabilirsiniz.

<appSettings>
    <add key="webpages:Enabled" value="false" />
</appSettings>

(Jilet görünümleri ve web sayfaları arasındaki ilişki konusunda hala tam olarak net değilim, ancak ustura görünümlerine sahip MVC uygulamam web sayfaları devre dışı bırakıldığında hala çalışıyor gibi görünüyor.)


0

Ayrıca son adım olarak, bin klasörünüzü hatanın geldiği projeden temizleyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.