"콘텐츠"(ASPX/ASCX 및 어셈블리) 파일을 다른 위치에 저장하는 ASP.Net 웹 응용 프로그램을 만들려고합니다. 시스템 (예 : 서비스 내부)에 저장하고 필요에 따라 동적으로로드합니다.동적으로로드하는 페이지 클래스/어셈블리 : 형식 또는 이름을 전역 네임 스페이스에서 찾을 수 없습니다.
대체 위치에서 ASPX/Master/ASCX 파일을 읽는 VirtualPathProvider를 성공적으로 만들었지 만 ASPX 페이지가 클래스를 상속 할 때 문제가 발생합니다. 즉, 코드가 뒤에있는 경우입니다.
답변 덕분에 another question 이제 런타임에 어셈블리를 응용 프로그램에로드 할 수있게되었습니다. 나는 당신이보고 쉽게되도록 잘못 무슨 일이 일어나고 있는지의 간단한 예제에 내 코드를 삶은 한
"Compiler Error Message: CS0400: The type or namespace name 'Web' could not be found in the global namespace (are you missing an assembly reference?)"
[System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()] public class default_aspx : global::Web.Code.CodeBehind, System.Web.SessionState.IRequiresSessionState, System.Web.IHttpHandler
: 내 런타임 내 페이지를 컴파일하려고 할 때 나는 다음과 같은 오류가 발생합니다. You can download this code here.
어셈블리는 런타임에 AppDomain.AssemblyResolve 이벤트를 사용하여 동적으로로드됩니다. 이것은 global.asax에 있으며 다음과 같이 보입니다 :
protected void Application_Start(object sender, EventArgs e)
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(Assembly_Resolve);
}
Assembly Assembly_Resolve(object sender, ResolveEventArgs args)
{
Assembly assembly = AppDomain.CurrentDomain.Load(Resources.Web_Code);
if (args.Name == assembly.FullName)
{
return assembly;
}
return null;
}
아이디어가 있으십니까?
편집 어떤 이유로 당신이 Web.Code 어셈블리를 업데이트해야하는 경우 - 당신이 그 변경 사항을 적용하기 위해 웹 프로젝트의 "ReferencedAssemblies"폴더에 복사해야합니다.
안녕하세요 이반, 저는 현재이 기술을 사용할 가능성에 대해 조사하고 있습니다. 그러나 파일 시스템에 쓸 필요가 없기를 바라고 있습니다. 이상적으로 이러한 어셈블리는 메모리 상주에만 적합합니다. 좋은 아이디어. –
그게 내가하는 일이다. 어셈블리가 Assembly.LoadFromFile (...) 메서드를 사용하여 파일 시스템에서로드 된 경우에만 모든 것이 작동한다. 다른로드 컨텍스트가 있습니다. http://msdn.microsoft.com/en-us/library/dd153782(v=vs.110).aspx –