2

これを投稿する前に、私はここSOの質問を読みました-

私は少し異なるアプローチを取りましたが、それは簡単に思えます。

MVC-3アプリケーションには、コントローラーとビューがほとんど含まれていなかったためです。新しいMVC-4-Basicアプリケーションを作成し、次のファイルをコピーしました-

  1. コントローラー
  2. ビュー
  3. レイアウトファイル
  4. 古いGlobal.asax.csからApp_Start/Route.Configへのルーティング情報

このアプローチで私が見る利点は

  1. 新しいDLLを手動で参照する必要はありませんでした。
  2. Web.config参照を更新する必要はありませんでした。

ビルドは正常に行われますが、アプリケーションの実行中に次のエラーが発生します。

[A]System.Web.WebPages.Razor.Configuration.HostSectionを[B]System.Web.WebPages.Razor.Configuration.HostSectionにキャストすることはできません。

タイプAは、場所'C:\ WINDOWS \ Microsoft.Net \ assembly \ GAC_MSIL \Systemのコンテキスト'Default'の'System.Web.WebPages.Razor、Version = 1.0.0.0、Culture = neutral、PublicKeyToken=31bf3856ad364e35'に由来します。 .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \System.Web.WebPages.Razor.dll'。

タイプBは、場所'C:\ WINDOWS \ Microsoft.Net \ assembly \ GAC_MSIL \Systemのコンテキスト'Default'の'System.Web.WebPages.Razor、Version = 2.0.0.0、Culture = neutral、PublicKeyToken=31bf3856ad364e35'に由来します。 .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \System.Web.WebPages.Razor.dll'。

明らかにどこかでMVC3dllが参照されています。しかし、どこかわからない?これに関するアドバイスは役に立ちます。ありがとう !

4

1 に答える 1

5

私が推測しなければならなかったとしたら、あなた~/Views/web.configは上書きされ、まだ古いかみそりパーサー(そしてその後古い構成セクション)を指していると思います。そのファイルを次のように置き換えてみてください。

<?xml version="1.0"?>

<configuration>
    <configSections>
        <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>
    </configSections>

    <system.web.webPages.razor>
        <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <pages pageBaseType="System.Web.Mvc.WebViewPage">
            <namespaces>
                <add namespace="System.Web.Mvc" />
                <add namespace="System.Web.Mvc.Ajax" />
                <add namespace="System.Web.Mvc.Html" />
                <add namespace="System.Web.Optimization" />
                <add namespace="System.Web.Routing" />
            </namespaces>
        </pages>
    </system.web.webPages.razor>

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

    <system.web>
        <httpHandlers>
            <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
        </httpHandlers>

        <!--
        Enabling request validation in view pages would cause validation to occur
        after the input has already been processed by the controller. By default
        MVC performs request validation before a controller processes the input.
        To change this behavior apply the ValidateInputAttribute to a
        controller or action.
    -->
        <pages
            validateRequest="false"
            pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
            pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
            userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <controls>
                <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
            </controls>
        </pages>
    </system.web>

    <system.webServer>
        <validation validateIntegratedModeConfiguration="false" />

        <handlers>
            <remove name="BlockViewHandler"/>
            <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
        </handlers>
    </system.webServer>
</configuration>
于 2013-01-10T18:19:17.837 に答える