2009-04-23 2 views
2

내 친구가 PHP로 컨텐츠 관리 시스템을 구축 중입니다.C#, ASP.NET 3.5 - 런타임에 코드로드

PHP 코드가 실행시에 평가되는 스크립트 언어이며, 따라서 실행시 .. 코드를 추가하는 매우 간단하다 (생각 : 포럼, 문의 양식 등)

을 ASP.NET (컴파일 된)에서 동일한 작업을 수행 ... 간단하지 않습니다.

코드를 동적으로로드하고 라이브 웹 응용 프로그램에서 사용하는 방법에 대한 의견이 있으십니까?

+0

무엇을 수행 하시겠습니까? –

+0

@Ian Quigley : 내 질문이 업데이트되었습니다. – roosteronacid

+0

더 나은 답변을 원한다면 .dlls (컴파일 된 코드) 또는 소스 파일을 포함할지 여부를 아는 것이 매우 도움이됩니까? 내가 생각하기에 두 세트의 상반되는 대답을 얻고 있기 때문입니다. –

답변

2

이 경우 앱 코드 폴더를 사용할 수 있다고 생각합니다. 개발자가 dll을 업로드 할 수 없도록하여 방금 컴파일 된 app 코드 폴더를 사용하는 해결책에 대해 들었습니다. 따라서 클래스를 추가하면 요구에 따라 컴파일됩니다.

See here

0

오픈 소스 BlogEngine.NET는 개발자가 유용하게 사용할 수있는 확장을 작성할 수 있도록 거기에 몇 가지 코드가 있습니다. 확장 프로그램은 Global.asax를 통해 응용 프로그램 시작시로드됩니다.

1

은 당신이해야 할 일은 플러그인 기반 구조를 만드는 것입니다

플러그인 기반의 프로그래밍 내가 여기 답변에 당신에게 설명 할 수있는 것이 아닙니다,하지만 당신은 어셈블리로 사용하려는 인터페이스를 만들 모듈 (플러그인)을 구현해야합니다. 그러면 런타임에 플러그인 폴더에있는 모든 dll을로드하고 C# 리플렉션, 특히 Activator 클래스를 사용합니다.

이 점에있어서 가장 좋은 점은 Windows 프로그래밍과 같은 원리입니다.

1

Visual Studio 2008을 사용하는 경우 기본 웹 사이트 모델은 컴파일 된 dll을 사용하지 않고 믿을 수있는 코드 숨김을 컴파일합니다. 언급 한대로 App Code 폴더를 사용할 수도 있습니다. 언급 한 BlogEngine.NET을 확인하는 것은 아마 좋은 출발점 일뿐만 아니라 즉시 컴파일 된 멋진 확장 아키텍처를 가지고 있습니다.

코드 숨김 파일을 가지고 있지 않고 코드를 <script language="C#" runat="server"></script>에두면 기본적으로 Visual Studio Express 버전이 수행한다고 생각할 수도 있습니다.

+0

네, "File | New ... | Web Site"모델은 "컴파일 된 온더 플라이"어플리케이션을 제공합니다. "File | New ... | Project | Web | Web Application"을 선택하면 "배포 전에 컴파일 된"웹 응용 프로그램이 생깁니다. 두 가지 모두에 장단점이 있습니다. –

1

나는 항상 공급자를 구성하기 위해 최선을 다하고 있습니다.

try 
{ 
    string assembly = ConfigurationSettings.AppSettings["DataProvider"].Split(',')[0]; 
    string classname = ConfigurationSettings.AppSettings["DataProvider"].Split(',')[1]; 
    m_Instance = (SqlDataProvider)Activator.CreateInstance(assembly,classname).Unwrap(); 
} 
catch(Exception ex) 
{ 
    Common.Error.Write("Getting Data Provider From Config"); 
} 

는 config 설정은 다음과 같습니다

<add key="DataProvider" value="MyDll,MyDll.Data.SqlDataProvider"/> 

하지만 강력한 형식의 언어이기 때문에, 당신의 코드는 유형이나 인터페이스에 대한 참조를해야 할 것입니다. 처리 방법을 모르는 코드를 가져올 수 없습니다. 리플렉션에서 하루 종일 코딩하려고하지 않는 한.