.NET 핫 플러그 기능(동적 교체 기능)구현 방안 인 스 턴 스

몇 가지 방안
1.스 크 립 트 화:Iron 을 사용 하거나 다른 스 크 립 트 엔진 을 통합 합 니 다.2.AppDomain:마이크로소프트 의 Add In 프레임 워 크 는 바로 이 목적 을 위해 디자인 된 것 이다.3 분포 식+부하 균형:클 러 스 터 의 서버 를 돌아 가면 서 업데이트 합 니 다.4 Assembly.LoadFrom+강력 한 서명 프로그램 집합:같은 표지 의 프로그램 집합 은 메모리 에 한 번 만 불 러 오기 때문에 기능 이 변 할 때마다 프로그램 집합 버 전 번 호 를 추가 해 야 합 니 다.5 Assembly.Load +  + 강력 한 서명 프로그램 집합+GAC:같은 표지 의 프로그램 집합 은 메모리 에 한 번 만 불 러 오기 때문에 매번 기능 이 변 할 때마다 프로그램의 버 전 번 호 를 추가 해 야 합 니 다.6 Assembly.LoadFile:Assembly.LoadFile 은 같은 표지 의 프로그램 집합 을 여러 번 불 러 올 수 있 습 니 다.프로그램 집합 이 있 는 디 렉 터 리 위치 만 다 르 면.
중점적으로 Assembly.LoadFile
테스트 코드

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.IO;
using Contracts;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            SetupPlugEnvironment();

            ExecuteOperator("1.0.0.0");
            ExecuteOperator("2.0.0.0");
        }

        private static void ExecuteOperator(string version)
        {
            var operatorType = Type.GetType("Implements.Operator, Implements, version = " + version + "");
            var operatorInstance = Activator.CreateInstance(operatorType) as IOperator;
            operatorInstance.Operate();
        }

        private static void SetupPlugEnvironment()
        {
            AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
        }

        static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            AssemblyName name = new AssemblyName(args.Name);

            var file = Path.Combine(
                @"E:\Coding\HappyStudy\LoadContextStudy\Test\bin\Debug\Plugs",
                name.Name,
                name.Version.ToString(),
                name.Name + ".dll");

            Console.WriteLine(" :" + name.Version);

            return Assembly.LoadFile(file);
        }
    }
}


Type.GetType 을 호출 하면 CLR 이 프로그램 집합 탐지 과정 을 수행 할 수 있 음 을 설명 합 니 다.정상 적 인 탐지 경로 에서 프로그램 집합 을 찾 지 못 하면 Assembly Resolve 이 벤트 를 촉발 합 니 다.왜 두 번 촉발 합 니까?나 는 아직 모른다.
마이크로소프트 는 LoadFile(같은 표지 의 프로그램 집합 을 여러 번 불 러 옵 니 다)을 추천 하지 않 습 니 다.Add In 은 AppDomain,MEF 는 LoadFrom 를 사용 합 니 다.

좋은 웹페이지 즐겨찾기