2

작업중인 웹 사이트의 모듈/플러그인 시스템을 작성하려고합니다. 전체 목표는 다음과 같습니다.ASP.Net MVC : AppPool 다시 시작/다시 사용하지 않고 어셈블리 (컨트롤러)를 동적으로로드하는 방법

  1. 새 플러그인을 추가 할 때마다 기본 웹 사이트를 다시 컴파일 할 필요가 없다는 것입니다.
  2. 기본적으로 루트, 컨트롤러 및 모듈이 종속 된 다른 어셈블리 (Entity Framework 등) 집합을 추가하는 폴더 집합에 DLL 및 CSHTML 파일을 덤프 할 수 있습니다.
  3. 플러그인 파일을 "임베디드 리소스"- 특히보기로 표시하지 않으려면.
  4. IIS 응용 프로그램 풀을 재시작/재사용하거나 앱 도메인을 언로드하지 않고도이 모듈/플러그인을 추가 및 제거 할 수 있습니다.

움브라코의 예를 따르면서 1-3 번 일했습니다. 기본적으로 PreApplicationStartMethod 특성을 가진 메서드를 표시하고 그 안에 DLL 복사를 섀도 잉하고 사용자 지정 ViewEngine을 사용하여 모듈의 CSHTML 파일을 찾습니다. 내 웹 사이트가 처음 시작되면 모듈의 컨트롤러와 뷰가 작동하고 어셈블리가로드됩니다. 만세! 이 부분 # 4를 시도하는 시간을 왔을 때 BuildManager.AddReferencedAssembly()를 호출 할 때

그러나,이 오류가 무엇입니까 :

이 메서드는 응용 프로그램의 사전 시작 초기화 단계에서 호출 할 수 있습니다. 그것은 지금까지 매우 실망 과정이었다

그 단계에서 호출하는 방법을 선언 에 PreApplicationStartMethodAttribute를 사용하여 내 직감이 오류가 막 다른 골목을 의미 하더군요. 이 경우입니까, 아니면 현명한 해결 방법이 있습니까?

+0

안녕하세요,이 해결책이 있습니까? –

답변

0

이 "/ 다시 시작 IIS 응용 프로그램 풀을 재활용하거나 언로드 할 필요없이이 모듈/플러그인을 추가 및 제거 할 수 있으려면 앱 도메인. "

앱 도메인에서 어셈블리를 언로드 할 수없는 것으로 나타났습니다.

How to unload an assembly from the primary AppDomain?

0

새 모듈을 추가 할 때 web.config 파일을 편집하면 사이트가 다시 컴파일되어야합니다.

스크립트에서이를 자동화하여 새로운 .dll을 라이브 ASP.NET 임시 파일 디렉터리에 복사 할 수 있습니다.

0

휴대용 영역을 확인하십시오. 본질적으로 일반적인 MVC 영역 (보기, 컨트롤러 등 포함)은 단일 dll로 컴파일됩니다. 이 dll (각 영역에 하나씩)은 호스팅 MVC 웹 사이트에 포함될 수 있으며 다른 MVC 영역과 마찬가지로 호출 될 수 있습니다.

일부 참조는 시작하기 :

Portable Areas three years later – Part 5

MvcContrib Portable Areas

+0

보내 주신 기사를 읽었습니다. 불행히도이 단계 중 하나는 기본 프로젝트에 대한 참조를 추가하고 다시 컴파일하는 것입니다. 배포로 인해 응용 프로그램 풀이 다시 시작됩니다.이것이 내가 피하려고하는 한 가지입니다. – anon

+0

안녕하세요, 이것에 대한 해결책을 찾았습니까? –

관련 문제