.NET에서 플러그인 시스템을 구현했습니다. 기본 라이브러리는 플러그인에 노출 된 기본 클래스 및 인터페이스를 구현하며, 플러그인 라이브러리는 노출 된 클래스 및 인터페이스를 사용하기 위해 기본 라이브러리를 연결합니다.C# 플러그인 시스템 이진 호환성 문제
내가 직면하고있어 문제는 (또는 수정없이) 기본 라이브러리의 (단순) 재 컴파일은 예외 메시지주고,로드 할 수 플러그인을하지 못하도록 할 것입니다 :
"Could not load file or assembly 'BaseLibrary, Version=0.0.1.68, Culture=neutral, PublicKeyToken=7b445b12e635292c' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)"
이 문제를 는 기본 라이브러리와 플러그인 라이브러리를 모두 한꺼번에 컴파일하여 해결되지만,이 단계에서는 기본 라이브러리를 자주 수정하기 때문에 개발 중에는별로 편하지 않습니다.
이진 일치를 "완화"하는 방법이 있다면?
기본 라이브러리 어셈블리 정보 (아래 인용)가 문제의 원인 일 수 있습니까?
[assembly: AssemblyVersion("0.0.1.*")]
어셈블리에 서명하는 것을 잊었습니다.
어셈블리 여기 나에게 다음과 같은 루틴
Assembly hLibrary = Assembly.LoadFile(pPath);
Type plugImageCodecFactoryType = hLibrary.GetType("Derm.ImageCodecPluginFactory", true, false);
object plugImageCodecFactory = Activator.CreateInstance(plugImageCodecFactoryType);
object plugInstance;
MethodInfo plugFactoryCreate = plugImageCodecFactoryType.GetMethod("CreatePlugin", BindingFlags.Instance|BindingFlags.Public);
plugInstance = plugFactoryCreate.Invoke(plugImageCodecFactory, null);
if (plugInstance is IImageCodecPlugin)
RegisterPlugin((IImageCodecPlugin)plugInstance);
기본 라이브러리 재 컴파일의 경우에도 플러그인이로드되고 올바르게 실행됩니다. 기본 리비전 대신 버전 리비전을 68로 고정합니다. 그렇다면 플러그인로드에 대한 개정을 어떻게 무시합니까? 주 버전과 부 버전에서만 이진 변경 사항을 표시하고 싶습니다. – Luca
그냥 0으로두면 문제가 생깁니 까? – Tigran
버전 개정은 소스/2 진 릴리스를 식별합니다. 개정판을 변경하려면 모든 플러그인 재 컴파일 (및 배포)이 필요합니다. – Luca