Programing

.NET 4.5로 업그레이드 한 후 iFrame 파서 오류

crosscheck 2020. 11. 14. 09:54
반응형

.NET 4.5로 업그레이드 한 후 iFrame 파서 오류


최근에 모든 WebForms 프로젝트를 .NET 4.5로 업그레이드했으며 iFrame요소 가있는 페이지를로드 할 때 파서 문제가 발생했습니다 . 우리는의 변환하여이 문제를 해결 한 iFrame에서 HtmlGenericControlHtmlIframe. 이것은 로컬에서 코드를 실행할 때 모든 파서 오류를 수정했습니다.

앱을 배포 할 때 다음 오류 메시지가 표시됩니다.

파서 오류 메시지 : 기본 클래스에 'frame'필드가 포함되어 있지만 해당 유형 (System.Web.UI.HtmlControls.HtmlIframe)이 컨트롤 유형 (System.Web.UI.HtmlControls.HtmlGenericControl)과 호환되지 않습니다. **

HtmlGenericControl.NET 4.5를 설치 했음에도 불구하고 서버가 여전히 이전 버전을 사용하고 있다는 오류 와 함께 이전 코드를 배포하면 오류가 사라집니다.

.NET을 제거하고 다시 설치하여 IIS에 ASP를 등록했는지 확인했습니다.

IIS 7.5 및 .NET 4.5가 설치된 Windows 2008 R2


기본적인 문제는 ASP.NET 컴파일러 (ASPX 및 ASCX 파일을 C # 또는 VB 코드로 컴파일)에 의해 Web Forms IFRAME 서버 컨트롤에서 생성 된 개체와 Web Forms의 해당 컨트롤에 해당하는 변수 유형 간의 비 호환성입니다. 뒤에 코드. 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 Forms 코드가 여전히 HtmlGenericControl 인 경우 문제가 발생할 수 있습니다. 표시되는 오류는 다음과 같습니다.

기본 클래스에 'frame'필드가 포함되어 있지만 해당 형식 (System.Web.UI.HtmlControls.HtmlGenericControl)이 컨트롤 형식 (System.Web.UI.HtmlControls.HtmlIframe)과 호환되지 않습니다.

이전 오류에 대한 해결책은 IFRAME 서버 컨트롤에 해당하는 서버 컨트롤 변수의 유형을 업데이트하는 것입니다. Web Forms 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>

이것은 그것을 고칠 것입니다.


변환 문제를 해결할 수있었습니다.

<iframe id="iframe" runat="server" />

...에

<asp:HtmlIframe id="iframe" runat="server" />

구성 파일에 다음 설정이 있는지 확인하십시오. 또한 게시 후 거기에 있는지 확인하십시오.

<system.web>
    <httpRuntime targetFramework="4.5" />
    <compilation debug="true" targetFramework="4.5"/>
    ...
</system.web>

도움이 되었기를 바랍니다.


You can keep your HTML element as <iframe>, and simply modify your .designer file to change the type to

System.Web.UI.HtmlControls.HtmlIframe

Further (or in as a combination of the answers here).

I don't believe it's needed to actually change the tags from iframe to asp:HtmlIFrame if you have the reference to the updated System.Web.UI.HtmlControls.

I updated my web.config to remove specific versions of the tag prefix and replace it with:

<add tagPrefix="asp" namespace="System.Web.UI.HtmlControls" assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

Clean and rebuild the project and that regenerates all the designer tags for me with the correct HtmlIFrame output.


i had also face this issue but simply i deleted this UserControl ans added new userControl with same name then my issue were fixed.....

  <iframe id="logPanel" runat="server" scrolling="auto" src="">


Look into designer file, and replace Htmliframe for HtmlGenericControl in the control that has problems.


From .NET 4.5, Microsoft decided to change the iframe from a HtmlGenericControl to its own control, a HtmlIframe. so you have to change the

System.Web.UI.HtmlControls.HtmlGenericControls to System.Web.UI.HtmlControls.HtmlIframe

My solution was to just rename the IFrame and rebuild and the designer file will be updated accordingly with the correct references.

참고URL : https://stackoverflow.com/questions/17809446/iframe-parser-error-after-upgrading-to-net-4-5

반응형