public void ReferenceActivated(ExtensionLoadingContext context, ExtensionReferenceProbeEntry referenceEntry) { throw new NotImplementedException(); }
/// <summary> /// 激活引用。 /// </summary> /// <param name="context">扩展装载上下文。</param> /// <param name="referenceEntry">引用条目。</param> public override void ReferenceActivated(ExtensionLoadingContext context, ExtensionReferenceProbeEntry referenceEntry) { if (string.IsNullOrEmpty(referenceEntry.VirtualPath)) return; var sourceFileName = _applicationFolder.MapPath(referenceEntry.VirtualPath); //如果程序集文件不存在或者比新的旧则复制新的程序集文件到依赖目录。 var copyAssembly = !_assemblyProbingFolder.AssemblyExists(new AssemblyDescriptor(referenceEntry.Name)) || File.GetLastWriteTimeUtc(sourceFileName) > _assemblyProbingFolder.GetAssemblyDateTimeUtc(new AssemblyDescriptor(referenceEntry.Name)); if (!copyAssembly) return; context.CopyActions.Add(() => _assemblyProbingFolder.StoreAssembly(new AssemblyDescriptor(referenceEntry.Name), sourceFileName)); //如果程序集已经被加载,需要重新启动AppDomain if (!_hostEnvironment.IsAssemblyLoaded(referenceEntry.Name)) return; Logger.Information("ReferenceActivated: 引用 \"{0}\" 激活新的程序集文件加载,迫使AppDomain重启", referenceEntry.Name); context.RestartAppDomain = true; }