내 친구가 PHP로 컨텐츠 관리 시스템을 구축 중입니다.C#, ASP.NET 3.5 - 런타임에 코드로드
PHP 코드가 실행시에 평가되는 스크립트 언어이며, 따라서 실행시 .. 코드를 추가하는 매우 간단하다 (생각 : 포럼, 문의 양식 등)
을 ASP.NET (컴파일 된)에서 동일한 작업을 수행 ... 간단하지 않습니다.
코드를 동적으로로드하고 라이브 웹 응용 프로그램에서 사용하는 방법에 대한 의견이 있으십니까?
내 친구가 PHP로 컨텐츠 관리 시스템을 구축 중입니다.C#, ASP.NET 3.5 - 런타임에 코드로드
PHP 코드가 실행시에 평가되는 스크립트 언어이며, 따라서 실행시 .. 코드를 추가하는 매우 간단하다 (생각 : 포럼, 문의 양식 등)
을 ASP.NET (컴파일 된)에서 동일한 작업을 수행 ... 간단하지 않습니다.
코드를 동적으로로드하고 라이브 웹 응용 프로그램에서 사용하는 방법에 대한 의견이 있으십니까?
나는 내 자신의 질문에 here로 대답했다.
이 경우 앱 코드 폴더를 사용할 수 있다고 생각합니다. 개발자가 dll을 업로드 할 수 없도록하여 방금 컴파일 된 app 코드 폴더를 사용하는 해결책에 대해 들었습니다. 따라서 클래스를 추가하면 요구에 따라 컴파일됩니다.
오픈 소스 BlogEngine.NET는 개발자가 유용하게 사용할 수있는 확장을 작성할 수 있도록 거기에 몇 가지 코드가 있습니다. 확장 프로그램은 Global.asax를 통해 응용 프로그램 시작시로드됩니다.
은 당신이해야 할 일은 플러그인 기반 구조를 만드는 것입니다
플러그인 기반의 프로그래밍 내가 여기 답변에 당신에게 설명 할 수있는 것이 아닙니다,하지만 당신은 어셈블리로 사용하려는 인터페이스를 만들 모듈 (플러그인)을 구현해야합니다. 그러면 런타임에 플러그인 폴더에있는 모든 dll을로드하고 C# 리플렉션, 특히 Activator 클래스를 사용합니다.
이 점에있어서 가장 좋은 점은 Windows 프로그래밍과 같은 원리입니다.
Visual Studio 2008을 사용하는 경우 기본 웹 사이트 모델은 컴파일 된 dll을 사용하지 않고 믿을 수있는 코드 숨김을 컴파일합니다. 언급 한대로 App Code 폴더를 사용할 수도 있습니다. 언급 한 BlogEngine.NET을 확인하는 것은 아마 좋은 출발점 일뿐만 아니라 즉시 컴파일 된 멋진 확장 아키텍처를 가지고 있습니다.
코드 숨김 파일을 가지고 있지 않고 코드를 <script language="C#" runat="server"></script>
에두면 기본적으로 Visual Studio Express 버전이 수행한다고 생각할 수도 있습니다.
네, "File | New ... | Web Site"모델은 "컴파일 된 온더 플라이"어플리케이션을 제공합니다. "File | New ... | Project | Web | Web Application"을 선택하면 "배포 전에 컴파일 된"웹 응용 프로그램이 생깁니다. 두 가지 모두에 장단점이 있습니다. –
나는 항상 공급자를 구성하기 위해 최선을 다하고 있습니다.
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"/>
하지만 강력한 형식의 언어이기 때문에, 당신의 코드는 유형이나 인터페이스에 대한 참조를해야 할 것입니다. 처리 방법을 모르는 코드를 가져올 수 없습니다. 리플렉션에서 하루 종일 코딩하려고하지 않는 한.
무엇을 수행 하시겠습니까? –
@Ian Quigley : 내 질문이 업데이트되었습니다. – roosteronacid
더 나은 답변을 원한다면 .dlls (컴파일 된 코드) 또는 소스 파일을 포함할지 여부를 아는 것이 매우 도움이됩니까? 내가 생각하기에 두 세트의 상반되는 대답을 얻고 있기 때문입니다. –