우리는 수많은 플러그인 dll 파일이있는 웹 응용 프로그램을 개발 중입니다.BuildManager.AddReferencedAssembly 사용을 피하는 방법
이제 우리는 필요한 모든 어셈블리를로드 할 수 있지만이를 수행하는 동안 BuildManager.AddReferencedAssembly를 사용하고 있습니다. 어느 쪽 이죠? 조금 문제가 생깁니다.
문제는 응용 프로그램을 다시 시작하지 않고 이러한 dll 파일을 업데이트해야하지만 응용 프로그램이 실행되는 동안 이러한 dll 파일이 잠겨 있다는 것입니다.
이 dll 파일에는 bin 폴더가 사용되지 않습니다. 우리는 두 개의 다른 폴더를 사용하고 있습니다. (첫 번째 ~/plugins - 우리가 파일을 복사하기 위해 second-~/ptemp-folder는 plugins 폴더에있는 파일을 복사 한 다음 bin 폴더에있는 파일처럼 복사하는 데 사용됩니다)
응용 프로그램이 작동하는 동안 알다시피, bin 폴더의 파일을 덮어 쓸 수 있으므로 응용 프로그램이 실행되는 동안 프로젝트 어셈블리를 덮어 쓸 수 있음을 의미합니다.
일부 연구 끝에 appdomainsetup에서 개인 폴더를 사용하는 것이 가능하지만 어떻게 알아낼 수없는 것으로 나타났습니다. (우리는 다른 appdomain을 만들고 싶지 않습니다, 우리는 ptemp 폴더에있는이 파일들이 메인 도메인에 연결되기를 원합니다)
불쌍한 영어에 대해서는 유감이지만 가능하다면 저희를 도와주십시오.
그런데이 dll 파일 중 일부는 일부 mvc 영역을 포함합니다. 이 필요한 경우 우리는 닷넷 4.5을 사용하는
, MVC는 4
, 나는 몇 가지 코드를 게시 할 수 있습니다.
덧붙여서, 파일 잠금은 AppDomain.CurrentDomain.AppendPrivatePath (pluginsTempPath)에 의해 발생할 수 있음을 알았습니다. 선. 어쨌든, 우리는 임시 플러그 인 폴더에 이러한 dll 파일을 덮어 쓸 수 없으며 필요합니다. 지금 당장은 앱을 다시 시작하지 않고 dll을 업데이트 할 수 없습니다. – zokkan
(질문 후 12 개월 이상 댓글 달기) : 자신의 AppDomains에 플러그인을로드하려고합니다. –
자신의 앱 도메인에 플러그인을로드 할 수는 있지만 앱 도메인간에 데이터를 전달할 때 직렬화/비 직렬화 비용이 발생합니다. 'Execute something locally'라는 시나리오 대신 '원격 서비스 호출'과 같은 개념이 될 것입니다. – John