最近、すべてのWebFormsプロジェクトを.NET 4.5にアップグレードし、iFrame
要素を持つページを読み込むときにパーサーの問題が発生しました。 iFrame
をHtmlGenericControl
からHtmlIframe
に変換することでこれを修正しました。これにより、コードをローカルで実行する際のすべてのパーサーエラーが修正されました。
アプリをデプロイすると、次のエラーメッセージが表示されます。
パーサーエラーメッセージ:基本クラスにはフィールド 'frame'が含まれていますが、そのタイプ(System.Web.UI.HtmlControls.HtmlIframe)はコントロールのタイプ(System.Web.UI.HtmlControls.HtmlGenericControl)と互換性がありません。**
HtmlGenericControl
を使用して古いコードをデプロイすると、.NET 4.5をインストールしたにもかかわらず、サーバーが古いバージョンを使用していることを示唆するエラーが消えますか?
.NETを削除して再インストールし、aspをIISに登録するようにしました。
IIS 7.5および.NET 4.5を使用するWindows 2008 R2
変換の問題を修正できました
<iframe id="iframe" runat="server" />
に
<asp:HtmlIframe id="iframe" runat="server" />
基本的な問題は、ASP.NETコンパイラ(ASPXおよびASCXファイルをC#またはVBコード)にコンパイルする)によってWebフォームIFRAMEサーバーコントロールから生成されたオブジェクトと、 Webフォームコードビハインドのそのコントロールに対応する変数IFRAMEサーバーコントロール(<iframe id="frame" runat="server" />
)は、特定のタイプのコントロールとして解析されますASP.NET 4では、IFRAMEサーバーコントロールはHtmlGenericControlコントロールになります。 ASP.NET 4.5 IFRAMEサーバーコントロールは、HtmlIframeコントロールになります。
この問題は、web.configファイルのコンパイル要素のtargetFramework属性がプロジェクトのTarget Frameworkプロパティと一致し、IFRAMEサーバーコントロールに対応する変数がASP.NETのコントロールのタイプと一致することを確認することで修正できます。コンパイラが生成します。
Visual Studio 2013で.NET Framework 4.5に変換されたASP.NET 4プロジェクトは、コンパイル要素のtargetFramework属性の値が「4.5」(<compilation targetFramework="4.5"/>
)になるようにプロジェクトのweb.configファイルを変更します。これにより、ASP.NETコンパイラはIFRAMEサーバーコントロールをHtmlIframeコントロールとして扱います。コントロール変数の背後にあるWebフォームのコードがまだHtmlGenericControlである場合、これが問題を引き起こす可能性があります。表示されるエラーは次のとおりです。
基本クラスにはフィールド「frame」が含まれていますが、そのタイプ(System.Web.UI.HtmlControls.HtmlGenericControl)はコントロールのタイプ(System.Web.UI.HtmlControls.HtmlIframe)と互換性がありません。
前のエラーの解決策は、IFRAMEサーバーコントロールに対応するサーバーコントロール変数のタイプを更新することです。これを行うには、WebフォームHTMLファイルを再保存します。これにより、デザイナーファイルが再生成されます。私が見る限り(少なくともVisual Studio 2013では)、コントロールIDを変更する必要はありません。サーバー制御変数がコードビハインドファイルにある場合は、手動で更新する必要があります。
変数の背後にあるコードがHtmlIframeであるASP.NET 4.5プロジェクトでは、web.configファイルのコンパイル要素のtargetFramework属性の値が「4.0」(<compilation targetFramework="4.0"/>
)の場合、同様の問題が発生します。これにより、ASP.NETコンパイラはIFRAMEサーバーコントロールをHtmlGenericControlコントロールとして扱います。表示されるエラーは次のとおりです。
基本クラスにはフィールド「frame」が含まれますが、そのタイプ(System.Web.UI.HtmlControls.HtmlIframe)はコントロールのタイプ(System.Web.UI.HtmlControls.HtmlGenericControl)と互換性がありません。
前のエラーを修正する方法は、web.configコンパイル設定がプロジェクトのTarget Framework属性と一致することを確認することです。この場合、web.configのコンパイル要素のtargetFramework属性の値は「4.5」でなければなりません。
<compilation targetFramework="4.5"/>
注:httpRuntime要素のtargetFramework属性を4.5に設定すると、コンパイル要素のtargetFramework属性を4.5に設定する効果もあります。詳細については、 https://blogs.msdn.Microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework/ を参照してください。
注2:<asp:HtmlIframe>
タグはありません。 System.Web.UI.HtmlControls名前空間にタグプレフィックス "asp"を登録することは、IFRAMEサーバーコントロールを使用するために必要なものではありません。
次のタグを追加する必要があります。
<asp:HtmlIframe>
デザイナーで、コントロールタイプを次のように変更します。
System.Web.UI.HtmlControls.HtmlIframe
Web.configに次を追加します。
<controls>
<add tagPrefix="asp" namespace="System.Web.UI.HtmlControls" Assembly="System.Web"/>
</controls>
これで修正されるはずです。
設定ファイルに次の設定があることを確認してください。また、公開後にそれが存在することを確認してください。
<system.web>
<httpRuntime targetFramework="4.5" />
<compilation debug="true" targetFramework="4.5"/>
...
</system.web>
それが役立つことを願っています。
HTML要素を<iframe>
のままにして、.designerファイルを変更して、タイプを
System.Web.UI.HtmlControls.HtmlIframe
さらに(またはここでの回答の組み合わせとして)。
更新されたasp:HtmlIFrame
への参照がある場合、実際にタグをiframe
からSystem.Web.UI.HtmlControls
に変更する必要はないと思います。
Web.configを更新して、タグプレフィックスの特定のバージョンを削除し、次のものに置き換えました。
<add tagPrefix="asp" namespace="System.Web.UI.HtmlControls" Assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
プロジェクトをクリーンアップして再構築すると、正しいHtmlIFrame
出力を使用してすべてのデザイナータグが再生成されます。
私もこの問題に直面していましたが、このUserControlを削除し、同じ名前の新しいuserControlを追加しただけで問題が修正されました.....
<iframe id="logPanel" runat="server" scrolling="auto" src="">
デザイナーファイルを調べて、問題のあるコントロールのHtmlGenericControlのHtmliframeを置き換えます。
.NET 4.5から、MicrosoftはiframeをHtmlGenericControlから独自のコントロールであるHtmlIframeに変更することを決定しました。あなたが変更する必要があります
System.Web.UI.HtmlControls.HtmlGenericControls to System.Web.UI.HtmlControls.HtmlIframe
私の解決策は、IFrameの名前を変更して再構築するだけで、デザイナーファイルは適切な参照で更新されます。