Exemple #1
0
        /// <summary>
        /// 监控扩展。
        /// </summary>
        /// <param name="descriptor">扩展描述符条目。</param>
        /// <param name="monitor">监控动作。</param>
        public override void Monitor(ExtensionDescriptorEntry descriptor, Action <IVolatileToken> monitor)
        {
            if (Disabled)
            {
                return;
            }

            if (DisableMonitoring)
            {
                return;
            }

            //如果程序集文件存在则进行监控。
            var assemblyPath = GetAssemblyPath(descriptor);

            if (assemblyPath != null)
            {
                Logger.Debug("监控虚拟路径 \"{0}\"", assemblyPath);
                monitor(_applicationFolder.WhenPathChanges(assemblyPath));
                return;
            }

            //如果该组件不存在,我们监测含有“bin”文件夹后,如果是在Visual Studio中,例如重新编译的组件可能存在,我们需要改变配置检测。
            var assemblyDirectory = _applicationFolder.Combine(descriptor.Location, descriptor.Id, "bin");

            if (!_applicationFolder.DirectoryExists(assemblyDirectory))
            {
                return;
            }
            Logger.Debug("监控虚拟路径 \"{0}\"", assemblyDirectory);
            monitor(_applicationFolder.WhenPathChanges(assemblyDirectory));
        }
Exemple #2
0
        private IEnumerable <ExtensionDescriptorEntry> HarvestExtensions(string path, string extensionType, string manifestName, bool manifestIsOptional)
        {
            var key = string.Format("{0}-{1}-{2}", path, manifestName, extensionType);

            return(_cacheManager.Get(key, ctx =>
            {
                if (!DisableMonitoring)
                {
                    Logger.Debug("监控虚拟路径 \"{0}\"", path);
                    ctx.Monitor(_applicationFolder.WhenPathChanges(path));
                }

                return AvailableExtensionsInFolder(path, extensionType, manifestName, manifestIsOptional).ToArray();
            }));
        }
Exemple #3
0
        public PlacementFile Parse(string virtualPath)
        {
            return(_cacheManager.Get(virtualPath, context =>
            {
                if (!DisableMonitoring)
                {
                    Logger.Debug("监控虚拟路径 \"{0}\"", virtualPath);
                    context.Monitor(_webSiteFolder.WhenPathChanges(virtualPath));
                }

                var placementText = _webSiteFolder.ReadFile(virtualPath);
                return ParseImplementation(placementText);
            }));
        }