From 5aeecf77011416e51b197daa3c81626f1938f52c Mon Sep 17 00:00:00 2001 From: Shannon Date: Fri, 14 Nov 2014 14:05:46 +1100 Subject: [PATCH] working on U4-5648 Remove legacy razor macro's entirely --- .../RazorDataTypeModelStaticMappingItem.cs | 32 ------- src/Umbraco.Core/Models/MacroTypes.cs | 4 - src/Umbraco.Core/Services/MacroService.cs | 10 +-- src/Umbraco.Core/Umbraco.Core.csproj | 1 - .../Plugins/PluginManagerTests.cs | 9 -- src/Umbraco.Tests/Plugins/TypeFinderTests.cs | 2 - .../DynamicDocumentTestsBase.cs | 4 +- .../PublishedContent/DynamicNodeTests.cs | 76 ---------------- .../PublishedContent/DynamicXmlTests.cs | 66 +------------- .../LegacyExamineBackedMediaTests.cs | 90 ------------------- .../PublishedContent/RootNodeTests.cs | 43 +-------- .../TestHelpers/BaseSeleniumTest.cs | 4 - src/Umbraco.Tests/Umbraco.Tests.csproj | 6 -- src/Umbraco.Web.UI/Umbraco.Web.UI.csproj | 4 - .../config/ClientDependency.config | 2 +- .../developer/Macros/EditMacro.aspx.cs | 1 - .../umbraco/developer/Macros/editMacro.aspx | 6 -- .../developer/Macros/editMacro.aspx.cs | 23 ----- .../RazorDataTypeModelStaticMappingItem.cs | 49 ---------- src/umbraco.businesslogic/UmbracoSettings.cs | 19 ---- .../umbraco.businesslogic.csproj | 1 - src/umbraco.sln | 6 -- 22 files changed, 10 insertions(+), 448 deletions(-) delete mode 100644 src/Umbraco.Core/Configuration/RazorDataTypeModelStaticMappingItem.cs delete mode 100644 src/Umbraco.Tests/PublishedContent/DynamicNodeTests.cs delete mode 100644 src/Umbraco.Tests/PublishedContent/LegacyExamineBackedMediaTests.cs delete mode 100644 src/umbraco.businesslogic/Razor/RazorDataTypeModelStaticMappingItem.cs diff --git a/src/Umbraco.Core/Configuration/RazorDataTypeModelStaticMappingItem.cs b/src/Umbraco.Core/Configuration/RazorDataTypeModelStaticMappingItem.cs deleted file mode 100644 index 71aa7eaa0e..0000000000 --- a/src/Umbraco.Core/Configuration/RazorDataTypeModelStaticMappingItem.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; - -namespace Umbraco.Core.Configuration -{ - - //NOTE: This is used in the old DynamicNode for performing value conversions/mappings for certain data types. - // it has been obsoleted because we've replaced this with the PropertyEditorValueConvertersResolver which can - // have converters registered in code so we don't have to rely on even more config sections. - // These things probably won't need to be created all that often and in code is much easier to do. - - internal class RazorDataTypeModelStaticMappingItem - { - [Obsolete("This is not used whatsoever")] - public string Raw { get; set; } - //if all of the set (non null) properties match the property data currently being evaluated - public string PropertyTypeAlias { get; set; } - public string NodeTypeAlias { get; set; } - public Guid? DataTypeGuid { get; set; } - public string TypeName { get; set; } - - public bool Applies(Guid dataTypeGuid, string nodeTypeAlias, string propertyTypeAlias) - { - return - ( - (this.NodeTypeAlias != null || this.PropertyTypeAlias != null || this.DataTypeGuid != null) && - ((this.DataTypeGuid != null && this.DataTypeGuid == dataTypeGuid) || this.DataTypeGuid == null) && - ((this.PropertyTypeAlias != null && this.PropertyTypeAlias == propertyTypeAlias) || this.PropertyTypeAlias == null) && - ((this.NodeTypeAlias != null && this.NodeTypeAlias == nodeTypeAlias) || this.NodeTypeAlias == null) - ); - } - } -} diff --git a/src/Umbraco.Core/Models/MacroTypes.cs b/src/Umbraco.Core/Models/MacroTypes.cs index caf9586362..33382b9eae 100644 --- a/src/Umbraco.Core/Models/MacroTypes.cs +++ b/src/Umbraco.Core/Models/MacroTypes.cs @@ -19,10 +19,6 @@ namespace Umbraco.Core.Models [EnumMember] Unknown = 4, [EnumMember] - Python = 5, - [EnumMember] - Script = 6, - [EnumMember] PartialView = 7 } } \ No newline at end of file diff --git a/src/Umbraco.Core/Services/MacroService.cs b/src/Umbraco.Core/Services/MacroService.cs index fcfbe6d87a..532cac34fb 100644 --- a/src/Umbraco.Core/Services/MacroService.cs +++ b/src/Umbraco.Core/Services/MacroService.cs @@ -47,14 +47,8 @@ namespace Umbraco.Core.Services return MacroTypes.Xslt; if (string.IsNullOrEmpty(macro.ScriptPath) == false) - { - //we need to check if the file path saved is a virtual path starting with ~/Views/MacroPartials, if so then this is - //a partial view macro, not a script macro - //we also check if the file exists in ~/App_Plugins/[Packagename]/Views/MacroPartials, if so then it is also a partial view. - return (macro.ScriptPath.InvariantStartsWith(SystemDirectories.MvcViews + "/MacroPartials/") - || (Regex.IsMatch(macro.ScriptPath, "~/App_Plugins/.+?/Views/MacroPartials", RegexOptions.Compiled | RegexOptions.IgnoreCase))) - ? MacroTypes.PartialView - : MacroTypes.Script; + { + return MacroTypes.PartialView; } if (string.IsNullOrEmpty(macro.ControlType) == false && macro.ControlType.InvariantContains(".ascx")) diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index a7abe08742..4ceedc72c1 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -1167,7 +1167,6 @@ - diff --git a/src/Umbraco.Tests/Plugins/PluginManagerTests.cs b/src/Umbraco.Tests/Plugins/PluginManagerTests.cs index aa9fc7339f..07b1910ccc 100644 --- a/src/Umbraco.Tests/Plugins/PluginManagerTests.cs +++ b/src/Umbraco.Tests/Plugins/PluginManagerTests.cs @@ -14,7 +14,6 @@ using Umbraco.Core.IO; using Umbraco.Core.PropertyEditors; using umbraco.DataLayer; using umbraco.editorControls; -using umbraco.MacroEngines; using Umbraco.Tests.TestHelpers; using umbraco.uicontrols; using Umbraco.Web; @@ -53,7 +52,6 @@ namespace Umbraco.Tests.Plugins typeof(System.Web.Mvc.ActionResult).Assembly, typeof(TypeFinder).Assembly, typeof(ISqlHelper).Assembly, - typeof(ICultureDictionary).Assembly, typeof(UmbracoContext).Assembly, typeof(BaseDataType).Assembly }; @@ -312,13 +310,6 @@ namespace Umbraco.Tests.Plugins Assert.AreEqual(35, types.Count()); } - [Test] - public void Resolves_RazorDataTypeModels() - { - var types = PluginManager.Current.ResolveRazorDataTypeModels(); - Assert.AreEqual(2, types.Count()); - } - [Test] public void Resolves_RestExtensions() { diff --git a/src/Umbraco.Tests/Plugins/TypeFinderTests.cs b/src/Umbraco.Tests/Plugins/TypeFinderTests.cs index 8611570ef3..0f1bf24f39 100644 --- a/src/Umbraco.Tests/Plugins/TypeFinderTests.cs +++ b/src/Umbraco.Tests/Plugins/TypeFinderTests.cs @@ -20,7 +20,6 @@ using Umbraco.Core.IO; using umbraco.DataLayer; using umbraco.editorControls.tags; using umbraco.interfaces; -using umbraco.MacroEngines; using Umbraco.Tests.TestHelpers; using umbraco.uicontrols; using Umbraco.Web.BaseRest; @@ -60,7 +59,6 @@ namespace Umbraco.Tests.Plugins typeof(System.Web.Mvc.ActionResult).Assembly, typeof(TypeFinder).Assembly, typeof(ISqlHelper).Assembly, - typeof(ICultureDictionary).Assembly, typeof(Tag).Assembly, typeof(global::UmbracoExamine.BaseUmbracoIndexer).Assembly }; diff --git a/src/Umbraco.Tests/PublishedContent/DynamicDocumentTestsBase.cs b/src/Umbraco.Tests/PublishedContent/DynamicDocumentTestsBase.cs index 07787d8e2c..ccfb1bbf6e 100644 --- a/src/Umbraco.Tests/PublishedContent/DynamicDocumentTestsBase.cs +++ b/src/Umbraco.Tests/PublishedContent/DynamicDocumentTestsBase.cs @@ -235,7 +235,7 @@ namespace Umbraco.Tests.PublishedContent .FirstOrDefault(); Assert.IsNotNull(result); - Assert.IsTrue(result.GetType() == typeof(DynamicNull) || result.GetType() == typeof(umbraco.MacroEngines.DynamicNull)); + Assert.IsTrue(result.GetType() == typeof(DynamicNull)); //Assert.AreEqual(typeof(DynamicNull), result.GetType()); } @@ -259,7 +259,7 @@ namespace Umbraco.Tests.PublishedContent .FirstOrDefault(); Assert.IsNotNull(result); - Assert.IsTrue(result.GetType() == typeof (DynamicNull) || result.GetType() == typeof (umbraco.MacroEngines.DynamicNull)); + Assert.IsTrue(result.GetType() == typeof (DynamicNull)); //Assert.AreEqual(typeof (DynamicNull), result.GetType()); } diff --git a/src/Umbraco.Tests/PublishedContent/DynamicNodeTests.cs b/src/Umbraco.Tests/PublishedContent/DynamicNodeTests.cs deleted file mode 100644 index ec2fdcbee5..0000000000 --- a/src/Umbraco.Tests/PublishedContent/DynamicNodeTests.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System; -using System.IO; -using NUnit.Framework; -using Umbraco.Core; -using Umbraco.Core.Configuration; -using Umbraco.Core.IO; -using Umbraco.Tests.TestHelpers; -using Umbraco.Web; -using Umbraco.Web.PublishedCache; -using Umbraco.Web.PublishedCache.XmlPublishedCache; -using umbraco.MacroEngines; -using umbraco.NodeFactory; -using System.Linq; - -namespace Umbraco.Tests.PublishedContent -{ - [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerFixture)] - [TestFixture] - public class DynamicNodeTests : DynamicDocumentTestsBase - { - - public override void Initialize() - { - base.Initialize(); - - //need to specify a custom callback for unit tests - DynamicNode.GetDataTypeCallback = (docTypeAlias, propertyAlias) => - { - if (propertyAlias == "content") - { - //return the rte type id - return Guid.Parse(Constants.PropertyEditors.TinyMCEv3); - } - return Guid.Empty; - }; - - } - - [Test] - [Ignore("This test will never work unless DynamicNode is refactored a lot in order to get a list of root nodes since root nodes don't have a parent to look up")] - public override void Is_First_Root_Nodes() - { - base.Is_First_Root_Nodes(); - } - - [Test] - [Ignore("This test will never work unless DynamicNode is refactored a lot in order to get a list of root nodes since root nodes don't have a parent to look up")] - public override void Is_Not_First_Root_Nodes() - { - base.Is_Not_First_Root_Nodes(); - } - - [Test] - [Ignore("This test will never work unless DynamicNode is refactored a lot in order to get a list of root nodes since root nodes don't have a parent to look up")] - public override void Is_Position_Root_Nodes() - { - base.Is_Position_Root_Nodes(); - } - - protected override dynamic GetDynamicNode(int id) - { - //var template = Template.MakeNew("test", new User(0)); - //var ctx = GetUmbracoContext("/test", template.Id); - var ctx = GetUmbracoContext("/test", 1234); - - var cache = ctx.ContentCache.InnerCache as PublishedContentCache; - if (cache == null) throw new Exception("Unsupported IPublishedContentCache, only the Xml one is supported."); - - var node = new DynamicNode( - new DynamicBackingItem( - new Node(cache.GetXml(ctx, ctx.InPreviewMode).SelectSingleNode("//*[@id='" + id + "' and @isDoc]")))); - Assert.IsNotNull(node); - return (dynamic)node; - } - } -} \ No newline at end of file diff --git a/src/Umbraco.Tests/PublishedContent/DynamicXmlTests.cs b/src/Umbraco.Tests/PublishedContent/DynamicXmlTests.cs index 642952e4aa..7288148333 100644 --- a/src/Umbraco.Tests/PublishedContent/DynamicXmlTests.cs +++ b/src/Umbraco.Tests/PublishedContent/DynamicXmlTests.cs @@ -44,18 +44,7 @@ namespace Umbraco.Tests.PublishedContent dynamicElementByCleanedName.someattribute); } - [Test] - public void Custom_Extension_Method_Legacy() - { - var xml = "/media/54/tulips.jpg1024768620888jpg/media/41/hydrangeas.jpg1024768595284jpg"; - var typedXml = new global::umbraco.MacroEngines.DynamicXml(xml); - dynamic dynamicXml = typedXml; - - //we haven't explicitly defined ElementAt so this will dynamically invoke this method - var element = dynamicXml.ElementAt(0); - - Assert.AreEqual("1057", Enumerable.First(element.BaseElement.Elements()).Attribute("id").Value); - } + [Test] public void Custom_Extension_Method() @@ -71,21 +60,7 @@ namespace Umbraco.Tests.PublishedContent Assert.AreEqual("1057", Enumerable.First(element.BaseElement.Elements()).Attribute("id").Value); } - [Test] - public void Take_Legacy() - { - var xml = "/media/54/tulips.jpg1024768620888jpg/media/41/hydrangeas.jpg1024768595284jpg"; - var typedXml = new global::umbraco.MacroEngines.DynamicXml(xml); - dynamic dynamicXml = typedXml; - var typedTaken = typedXml.Take(1); - var dynamicTaken = dynamicXml.Take(1); - - Assert.AreEqual(1, typedTaken.Count()); - Assert.AreEqual(1, Enumerable.Count(dynamicTaken)); - - Assert.AreEqual("1057", typedTaken.ElementAt(0).BaseElement.Elements().First().Attribute("id").Value); - Assert.AreEqual("1057", Enumerable.First(Enumerable.ElementAt(dynamicTaken, 0).BaseElement.Elements()).Attribute("id").Value); - } + [Test] public void Take() @@ -103,33 +78,7 @@ namespace Umbraco.Tests.PublishedContent Assert.AreEqual("1057", Enumerable.First(Enumerable.ElementAt(dynamicTaken, 0).BaseElement.Elements()).Attribute("id").Value); } - [Test] - public void Ensure_Legacy_Objects_Are_Returned() - { - var xml = "/media/54/tulips.jpg1024768620888jpg/media/41/hydrangeas.jpg1024768595284jpg"; - var mediaItems = new global::umbraco.MacroEngines.DynamicXml(xml); - //Debug.WriteLine("full xml = {0}", mediaItems.ToXml()); - - if (mediaItems.Count() != 0) - { - foreach (dynamic item in mediaItems) - { - Type itemType = item.GetType(); - Debug.WriteLine("item type = {0}", itemType); - dynamic image = item.Image; - - Type imageType = image.GetType(); - Debug.WriteLine("image type = {0}", imageType); - - //ensure they are the same - Assert.AreEqual(itemType, imageType); - - //ensure they are legacy - Assert.AreEqual(typeof(global::umbraco.MacroEngines.DynamicXml), itemType); - Assert.AreEqual(typeof(global::umbraco.MacroEngines.DynamicXml), imageType); - } - } - } + /// /// Test the current Core class @@ -140,14 +89,7 @@ namespace Umbraco.Tests.PublishedContent RunFindTest(x => new DynamicXml(x)); } - /// - /// Tests the macroEngines legacy class - /// - [Test] - public void Find_Test_Legacy_Class() - { - RunFindTest(x => new global::umbraco.MacroEngines.DynamicXml(x)); - } + private void RunFindTest(Func getDynamicXml) { diff --git a/src/Umbraco.Tests/PublishedContent/LegacyExamineBackedMediaTests.cs b/src/Umbraco.Tests/PublishedContent/LegacyExamineBackedMediaTests.cs deleted file mode 100644 index 7b0ffb41d7..0000000000 --- a/src/Umbraco.Tests/PublishedContent/LegacyExamineBackedMediaTests.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using System.Linq; -using Lucene.Net.Documents; -using Lucene.Net.Store; -using Moq; -using NUnit.Framework; -using Umbraco.Tests.TestHelpers; -using Umbraco.Tests.UmbracoExamine; -using umbraco.MacroEngines; - -namespace Umbraco.Tests.PublishedContent -{ - public class LegacyExamineBackedMediaTests : ExamineBaseTest - { - public override void TestSetup() - { - base.TestSetup(); - - var settings = SettingsForTests.GenerateMockSettings(); - var contentMock = Mock.Get(settings.Content); - contentMock.Setup(x => x.ForceSafeAliases).Returns(true); - contentMock.Setup(x => x.UmbracoLibraryCacheDuration).Returns(1800); - SettingsForTests.ConfigureSettings(settings); - } - - public override void TestTearDown() - { - SettingsForTests.Reset(); - base.TestTearDown(); - } - - [Test] - public void Ensure_Children_Are_Sorted() - { - using (var luceneDir = new RAMDirectory()) - { - var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir); - indexer.RebuildIndex(); - - var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir); - var result = searcher.Search(searcher.CreateSearchCriteria().Id(1111).Compile()); - Assert.IsNotNull(result); - Assert.AreEqual(1, result.TotalItemCount); - - var searchItem = result.First(); - var backedMedia = new ExamineBackedMedia(searchItem, indexer, searcher); - var children = backedMedia.ChildrenAsList.Value; - - var currSort = 0; - for (var i = 0; i < children.Count(); i++) - { - Assert.GreaterOrEqual(children[i].SortOrder, currSort); - currSort = children[i].SortOrder; - } - } - - } - - [Test] - public void Ensure_Result_Has_All_Values() - { - using (var luceneDir = new RAMDirectory()) - { - var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir); - indexer.RebuildIndex(); - - var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir); - var result = searcher.Search(searcher.CreateSearchCriteria().Id(1111).Compile()); - Assert.IsNotNull(result); - Assert.AreEqual(1, result.TotalItemCount); - - var searchItem = result.First(); - var backedMedia = new ExamineBackedMedia(searchItem, indexer, searcher); - - Assert.AreEqual(searchItem.Id, backedMedia.Id); - Assert.AreEqual(searchItem.Fields["sortOrder"], backedMedia.SortOrder.ToString()); - Assert.AreEqual(searchItem.Fields["urlName"], backedMedia.UrlName); - Assert.AreEqual(DateTools.StringToDate(searchItem.Fields["createDate"]), backedMedia.CreateDate); - Assert.AreEqual(DateTools.StringToDate(searchItem.Fields["updateDate"]), backedMedia.UpdateDate); - Assert.AreEqual(Guid.Parse(searchItem.Fields["version"]), backedMedia.Version); - Assert.AreEqual(searchItem.Fields["level"], backedMedia.Level.ToString()); - Assert.AreEqual(searchItem.Fields["writerID"], backedMedia.WriterID.ToString()); - Assert.AreEqual(searchItem.Fields["writerID"], backedMedia.CreatorID.ToString()); //there's only writerId in the xml - Assert.AreEqual(searchItem.Fields["writerName"], backedMedia.CreatorName); - Assert.AreEqual(searchItem.Fields["writerName"], backedMedia.WriterName); //tehre's only writer name in the xml - } - - } - } -} \ No newline at end of file diff --git a/src/Umbraco.Tests/PublishedContent/RootNodeTests.cs b/src/Umbraco.Tests/PublishedContent/RootNodeTests.cs index ceefbbc847..aca34766d5 100644 --- a/src/Umbraco.Tests/PublishedContent/RootNodeTests.cs +++ b/src/Umbraco.Tests/PublishedContent/RootNodeTests.cs @@ -1,13 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Linq; using NUnit.Framework; -using umbraco; -using umbraco.MacroEngines; using Umbraco.Web; -using Umbraco.Web.Models; -using Umbraco.Web.Security; namespace Umbraco.Tests.PublishedContent { @@ -38,39 +31,5 @@ namespace Umbraco.Tests.PublishedContent Assert.IsNull(content); } - [Test] - public void LegacyDynamicNodeSortOfHasRootNode() - { - // there is a node with ID -1 - var node = new DynamicNode(-1); - Assert.IsNotNull(node); - Assert.AreEqual(-1, node.Id); - - // content at root - node = new DynamicNode(1046); - Assert.IsNotNull(node); - Assert.AreEqual(1, node.Level); - - // has no parent - // (confirmed in 4.7 and 6.1) - Assert.IsNull(node.Parent); - - // has siblings etc - no idea how we're supposed to get them? - //var siblings = node.Parent.Children; - //Assert.AreEqual(2, siblings.Count()); - - // non-existing content is "zero node" - node = new DynamicNode(666, DynamicBackingItemType.Content); // set type to avoid Examine in tests - Assert.IsNotNull(node); - Assert.AreEqual(0, node.Id); - } - - [Test] - public void Fix_U4_4374() - { - var node = new DynamicNode(-1); - var id = node.DescendantsOrSelf().First().Id; - Assert.AreEqual(-1, id); - } } } diff --git a/src/Umbraco.Tests/TestHelpers/BaseSeleniumTest.cs b/src/Umbraco.Tests/TestHelpers/BaseSeleniumTest.cs index 832dde1e70..1a4ae05160 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseSeleniumTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseSeleniumTest.cs @@ -2,11 +2,7 @@ using System.Data.SqlServerCe; using System.Diagnostics; using System.IO; -using System.Linq; -using System.Linq.Dynamic; -using System.Runtime.InteropServices; using System.Text; -using System.Web.Management; using NUnit.Framework; using OpenQA.Selenium; using OpenQA.Selenium.Firefox; diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 8bb0da4a0d..6f3787a1e0 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -377,7 +377,6 @@ - @@ -445,7 +444,6 @@ - @@ -610,10 +608,6 @@ {511F6D8D-7717-440A-9A57-A507E9A8B27F} umbraco.interfaces - - {89C09045-1064-466B-B94A-DB3AFE2A5853} - umbraco.MacroEngines - {d7636876-0756-43cb-a192-138c6f0d5e42} umbraco.providers diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index 4a341b810c..a833bbcb3f 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -271,10 +271,6 @@ {255F5DF1-4E43-4758-AC05-7A0B68EB021B} umbraco.editorControls - - {89C09045-1064-466B-B94A-DB3AFE2A5853} - umbraco.MacroEngines - {6EDD2061-82F2-461B-BB6E-879245A832DE} umbraco.controls diff --git a/src/Umbraco.Web.UI/config/ClientDependency.config b/src/Umbraco.Web.UI/config/ClientDependency.config index 1c16a6e029..389cbf2b0e 100644 --- a/src/Umbraco.Web.UI/config/ClientDependency.config +++ b/src/Umbraco.Web.UI/config/ClientDependency.config @@ -10,7 +10,7 @@ NOTES: * Compression/Combination/Minification is not enabled unless debug="false" is specified on the 'compiliation' element in the web.config * A new version will invalidate both client and server cache and create new persisted files --> - +