From 4aea24f3d5480954233624f8d23015abd74ddc0b Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Sun, 21 Nov 2010 19:40:51 -0800 Subject: [PATCH] Fix Razor views re-compilation When modules are switched from dynamically compiled (.csproj) to precompiled (.dll), Razor views were sometimes not recompiled because the list of virtual path dependencies didn't contain any path that would change during the switch. The fix is to include "~/App_Data/Dependencies/Dependencies.xml" as a virtual path dependency, as this file changes when module configuration changes. Work Items: 16833 --HG-- branch : dev --- src/Orchard/FileSystems/AppData/IAppDataFolder.cs | 1 - .../FileSystems/Dependencies/DefaultDependenciesFolder.cs | 5 ++++- src/Orchard/FileSystems/Dependencies/IDependenciesFolder.cs | 1 + src/Orchard/Mvc/ViewEngines/Razor/IRazorCompilationEvents.cs | 4 ++++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Orchard/FileSystems/AppData/IAppDataFolder.cs b/src/Orchard/FileSystems/AppData/IAppDataFolder.cs index ad4012b01..d81b5bfac 100644 --- a/src/Orchard/FileSystems/AppData/IAppDataFolder.cs +++ b/src/Orchard/FileSystems/AppData/IAppDataFolder.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.Xml; using Orchard.Caching; namespace Orchard.FileSystems.AppData { diff --git a/src/Orchard/FileSystems/Dependencies/DefaultDependenciesFolder.cs b/src/Orchard/FileSystems/Dependencies/DefaultDependenciesFolder.cs index 1b4e6cb70..11ae69ed9 100644 --- a/src/Orchard/FileSystems/Dependencies/DefaultDependenciesFolder.cs +++ b/src/Orchard/FileSystems/Dependencies/DefaultDependenciesFolder.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Xml.Linq; using Orchard.Caching; -using Orchard.Data; using Orchard.FileSystems.AppData; using Orchard.Localization; @@ -56,6 +55,10 @@ namespace Orchard.FileSystems.Dependencies { } } + public IEnumerable GetViewCompilationDependencies() { + yield return _appDataFolder.GetVirtualPath(this.PersistencePath); + } + private IEnumerable ReadDependencies(string persistancePath) { Func ns = (name => XName.Get(name)); Func elem = (e, name) => e.Element(ns(name)).Value; diff --git a/src/Orchard/FileSystems/Dependencies/IDependenciesFolder.cs b/src/Orchard/FileSystems/Dependencies/IDependenciesFolder.cs index 5468cab95..9369fb38d 100644 --- a/src/Orchard/FileSystems/Dependencies/IDependenciesFolder.cs +++ b/src/Orchard/FileSystems/Dependencies/IDependenciesFolder.cs @@ -23,5 +23,6 @@ namespace Orchard.FileSystems.Dependencies { DependencyDescriptor GetDescriptor(string moduleName); IEnumerable LoadDescriptors(); void StoreDescriptors(IEnumerable dependencyDescriptors); + IEnumerable GetViewCompilationDependencies(); } } diff --git a/src/Orchard/Mvc/ViewEngines/Razor/IRazorCompilationEvents.cs b/src/Orchard/Mvc/ViewEngines/Razor/IRazorCompilationEvents.cs index e7371a813..172f38bd5 100644 --- a/src/Orchard/Mvc/ViewEngines/Razor/IRazorCompilationEvents.cs +++ b/src/Orchard/Mvc/ViewEngines/Razor/IRazorCompilationEvents.cs @@ -55,6 +55,10 @@ namespace Orchard.Mvc.ViewEngines.Razor { provider.AddVirtualPathDependency(virtualDependency); } } + + foreach (var virtualDependency in _dependenciesFolder.GetViewCompilationDependencies()) { + provider.AddVirtualPathDependency(virtualDependency); + } } public void CodeGenerationCompleted(RazorBuildProvider provider, CodeGenerationCompleteEventArgs e) {