2010-01-27 12 views
0

우리는 LoadControl을 사용하여 ascx 파일을 자리 표시 자 컨트롤에 동적으로로드합니다.LoadControl은 파서 오류를 발생시킵니다.

child = base.LoadControl(manufacturerTemplate.TemplatePath); 
this.ManufacturerPlaceHolder.Controls.Add(child); 

제어 헤더는 다음과 같습니다 : 코드 숨김은 매우 간단 보이는 모든 및 편집의

<%@ Control Language="C#" AutoEventWireup="true" Inherits="MyNamespace.MyControl" CodeBehind="MyControl.ascx.cs" %> 

내가 확인한 맞춤법. 그것은 ASP.NET 개발 웹 서버에서 잘 작동합니다. 그러나 IIS 호스트에 업로드하면이 오류가 나타납니다.

Parser Error: Could not load type 'MyNamespace.MyControl.

코드 숨김이 오류없이 컴파일됩니다. 실제로 다른 컨트롤의 코드 숨김과 중복됩니다. (철자법이 정확한지 확인) 필자가 시도한 것들 중 하나는 @Control 지시어를 수정하여 두 번째 컨트롤의 코드 숨김 (같은 기능을 공유)을 가리키는 것입니다.이 코드는 완벽하게 작동합니다.

내가 해봤 다른 것들 중 일부 :

  • 파일 시스템 권한
  • 다시 시작 IIS
  • 이 시점에서

그래서 ASP.NET Temp 폴더를 삭제, I 추가하려고 시도하는 코드 숨김을 사용할 수없는 이유가 없습니다. 다른 클래스의 코드 숨김을 가리킬 수 있으며 잘 작동합니다. ("상속 (inherits)"값을 변경 한 후) 그래서 나는 그것이 컴파일 문제라고 가정 할 수있다. 그러나 오류없이 올바르게 빌드됩니다.

무엇을 잊어 버리시겠습니까?

답변

0

문제점을 발견했습니다. 이 프로젝트는 "웹 사이트"가 아닌 "웹 응용 프로그램"이었기 때문에 컴파일 할뿐만 아니라 웹 사이트의 어셈블리를 배포해야했습니다.

1
사용이

MyControl controlObject= (MyControl)LoadControl("~/path/to/control/MyControl.ascx"); 
this.Controls.Add(controlObject); 
뒤에 코드에서 추가, 당신이 컨트롤을 사용하고있는 ASPX 페이지에서이

<%@ Control ClassName="MyControl" Language="C#" AutoEventWireup="true" CodeFile="MyControl.ascx.cs" Inherits="MyControl" %> 

이 코드

<%@ Reference Control="~/path/to/control/MyControl.ascx" %> 

을 컨트롤 태그를 변경

0

몇 가지 생각 :

  • 응용 프로그램을 완전히 지우고 다시 작성해야합니다.
  • 응용 프로그램을 게시 할 때 기존 파일을 모두 삭제 (대체하지 않음)해야합니다.
  • 컨트롤이 해당 디렉터리에서 참조되는 하위 폴더 또는 디렉터리에 있는지 확인하십시오.
  • ascx의 dll이 bin 폴더에 있는지 확인하십시오.
관련 문제