From fd095365849ba0f9250be5e22995f6d5ef5c2237 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Sun, 21 Nov 2010 18:06:39 -0800 Subject: [PATCH] Fix dynamic compilation bug If the assembly for a module doesn't exist on disk, monitor the parent directory ("~/Modules//bin") so that adding the assembly will force a re-compilation. --HG-- branch : dev --- .../Extensions/Loaders/PrecompiledExtensionLoader.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/Orchard/Environment/Extensions/Loaders/PrecompiledExtensionLoader.cs b/src/Orchard/Environment/Extensions/Loaders/PrecompiledExtensionLoader.cs index 2e3157e5c..4c151c1ba 100644 --- a/src/Orchard/Environment/Extensions/Loaders/PrecompiledExtensionLoader.cs +++ b/src/Orchard/Environment/Extensions/Loaders/PrecompiledExtensionLoader.cs @@ -121,10 +121,21 @@ namespace Orchard.Environment.Extensions.Loaders { } public override void Monitor(ExtensionDescriptor descriptor, Action monitor) { + // If the assembly exists, monitor it string assemblyPath = GetAssemblyPath(descriptor); if (assemblyPath != null) { Logger.Information("Monitoring virtual path \"{0}\"", assemblyPath); monitor(_virtualPathMonitor.WhenPathChanges(assemblyPath)); + return; + } + + // If the assembly doesn't exist, we monitor the containing "bin" folder, as the assembly + // may exist later if it is recompiled in Visual Studio for example, and we need to + // detect that as a change of configuration. + var assemblyDirectory = _virtualPathProvider.Combine(descriptor.Location, descriptor.Id, "bin"); + if (_virtualPathProvider.DirectoryExists(assemblyDirectory)) { + Logger.Information("Monitoring virtual path \"{0}\"", assemblyDirectory); + monitor(_virtualPathMonitor.WhenPathChanges(assemblyDirectory)); } }