diff --git a/build/templates/UmbracoProject/UmbracoProject.csproj b/build/templates/UmbracoProject/UmbracoProject.csproj index 08643bb150..3f229fde99 100644 --- a/build/templates/UmbracoProject/UmbracoProject.csproj +++ b/build/templates/UmbracoProject/UmbracoProject.csproj @@ -18,16 +18,13 @@ - - - @@ -44,7 +41,6 @@ - diff --git a/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs b/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs index 192c3966f6..349d9f01da 100644 --- a/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs @@ -30,7 +30,7 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// /// Models become out-of-date when data types or content types are updated. When this - /// setting is activated the ~/App_Data/Models/ood.txt file is then created. When models are + /// setting is activated the ~/umbraco/models/PureLive/ood.txt file is then created. When models are /// generated through the dashboard, the files is cleared. Default value is false. /// public bool FlagOutOfDateModels @@ -51,9 +51,10 @@ namespace Umbraco.Cms.Core.Configuration.Models /// /// Gets or sets a value for the models directory. /// - /// Default is ~/App_Data/Models but that can be changed. + /// Default is ~/umbraco/models but that can be changed. public string ModelsDirectory { get; set; } = DefaultModelsDirectory; + /// /// Gets or sets a value indicating whether to accept an unsafe value for ModelsDirectory. /// diff --git a/src/Umbraco.Web.Common/ModelsBuilder/PureLiveModelFactory.cs b/src/Umbraco.Web.Common/ModelsBuilder/PureLiveModelFactory.cs index ef8f54c1c1..568ef73362 100644 --- a/src/Umbraco.Web.Common/ModelsBuilder/PureLiveModelFactory.cs +++ b/src/Umbraco.Web.Common/ModelsBuilder/PureLiveModelFactory.cs @@ -50,6 +50,9 @@ namespace Umbraco.Cms.Web.Common.ModelsBuilder private readonly ApplicationPartManager _applicationPartManager; private static readonly Regex s_usingRegex = new Regex("^using(.*);", RegexOptions.Compiled | RegexOptions.Multiline); private static readonly Regex s_aattrRegex = new Regex("^\\[assembly:(.*)\\]", RegexOptions.Compiled | RegexOptions.Multiline); + private readonly Lazy _pureLiveDirectory; + + public PureLiveModelFactory( Lazy umbracoServices, @@ -77,17 +80,18 @@ namespace Umbraco.Cms.Web.Common.ModelsBuilder return; } - var modelsDirectory = _config.ModelsDirectoryAbsolute(_hostingEnvironment); - if (!Directory.Exists(modelsDirectory)) + _pureLiveDirectory = new Lazy(PureLiveDirectoryAbsolute); + + if (!Directory.Exists(_pureLiveDirectory.Value)) { - Directory.CreateDirectory(modelsDirectory); + Directory.CreateDirectory(_pureLiveDirectory.Value); } // BEWARE! if the watcher is not properly released then for some reason the // BuildManager will start confusing types - using a 'registered object' here // though we should probably plug into Umbraco's MainDom - which is internal _hostingLifetime.RegisterObject(this); - _watcher = new FileSystemWatcher(modelsDirectory); + _watcher = new FileSystemWatcher(_pureLiveDirectory.Value); _watcher.Changed += WatcherOnChanged; _watcher.EnableRaisingEvents = true; @@ -218,15 +222,14 @@ namespace Umbraco.Cms.Web.Common.ModelsBuilder _hasModels = false; _pendingRebuild = true; - var modelsDirectory = _config.ModelsDirectoryAbsolute(_hostingEnvironment); - if (!Directory.Exists(modelsDirectory)) + if (!Directory.Exists(_pureLiveDirectory.Value)) { - Directory.CreateDirectory(modelsDirectory); + Directory.CreateDirectory(_pureLiveDirectory.Value); } // clear stuff - var modelsHashFile = Path.Combine(modelsDirectory, "models.hash"); - var dllPathFile = Path.Combine(modelsDirectory, "all.dll.path"); + var modelsHashFile = Path.Combine(_pureLiveDirectory.Value, "models.hash"); + var dllPathFile = Path.Combine(_pureLiveDirectory.Value, "all.dll.path"); if (File.Exists(dllPathFile)) { @@ -340,6 +343,10 @@ namespace Umbraco.Cms.Web.Common.ModelsBuilder } } + + public string PureLiveDirectoryAbsolute() => _hostingEnvironment.MapPathContentRoot("~/umbraco/Data/TEMP/PureLive"); + + // This is NOT thread safe but it is only called from within a lock private Assembly ReloadAssembly(string pathToAssembly) { @@ -389,18 +396,18 @@ namespace Umbraco.Cms.Web.Common.ModelsBuilder // This is NOT thread safe but it is only called from within a lock private Assembly GetModelsAssembly(bool forceRebuild) { - var modelsDirectory = _config.ModelsDirectoryAbsolute(_hostingEnvironment); - if (!Directory.Exists(modelsDirectory)) + + if (!Directory.Exists(_pureLiveDirectory.Value)) { - Directory.CreateDirectory(modelsDirectory); + Directory.CreateDirectory(_pureLiveDirectory.Value); } IList typeModels = UmbracoServices.GetAllTypes(); var currentHash = TypeModelHasher.Hash(typeModels); - var modelsHashFile = Path.Combine(modelsDirectory, "models.hash"); - var modelsSrcFile = Path.Combine(modelsDirectory, "models.generated.cs"); - var projFile = Path.Combine(modelsDirectory, "all.generated.cs"); - var dllPathFile = Path.Combine(modelsDirectory, "all.dll.path"); + var modelsHashFile = Path.Combine(_pureLiveDirectory.Value, "models.hash"); + var modelsSrcFile = Path.Combine(_pureLiveDirectory.Value, "models.generated.cs"); + var projFile = Path.Combine(_pureLiveDirectory.Value, "all.generated.cs"); + var dllPathFile = Path.Combine(_pureLiveDirectory.Value, "all.dll.path"); // caching the generated models speeds up booting // currentHash hashes both the types & the user's partials @@ -569,7 +576,7 @@ namespace Umbraco.Cms.Web.Common.ModelsBuilder private string GetOutputAssemblyPath(string currentHash) { - var dirInfo = new DirectoryInfo(Path.Combine(_config.ModelsDirectoryAbsolute(_hostingEnvironment), "Compiled")); + var dirInfo = new DirectoryInfo(Path.Combine(_pureLiveDirectory.Value, "Compiled")); if (!dirInfo.Exists) { Directory.CreateDirectory(dirInfo.FullName); @@ -578,6 +585,7 @@ namespace Umbraco.Cms.Web.Common.ModelsBuilder return Path.Combine(dirInfo.FullName, $"generated.cs{currentHash}.dll"); } + private void ClearOnFailingToCompile(string dllPathFile, string modelsHashFile, string projFile) { _logger.LogDebug("Failed to compile."); @@ -666,13 +674,13 @@ namespace Umbraco.Cms.Web.Common.ModelsBuilder private string GenerateModelsCode(IList typeModels) { - var modelsDirectory = _config.ModelsDirectoryAbsolute(_hostingEnvironment); - if (!Directory.Exists(modelsDirectory)) + + if (!Directory.Exists(_pureLiveDirectory.Value)) { - Directory.CreateDirectory(modelsDirectory); + Directory.CreateDirectory(_pureLiveDirectory.Value); } - foreach (var file in Directory.GetFiles(modelsDirectory, "*.generated.cs")) + foreach (var file in Directory.GetFiles(_pureLiveDirectory.Value, "*.generated.cs")) { File.Delete(file); } @@ -686,6 +694,8 @@ namespace Umbraco.Cms.Web.Common.ModelsBuilder return code; } + + private static string GenerateModelsProj(IDictionary files) { // ideally we would generate a CSPROJ file but then we'd need a BuildProvider for csproj diff --git a/src/Umbraco.Web.UI.NetCore/Umbraco.Web.UI.NetCore.csproj b/src/Umbraco.Web.UI.NetCore/Umbraco.Web.UI.NetCore.csproj index 62ed7d1bbd..e19bd9f54b 100644 --- a/src/Umbraco.Web.UI.NetCore/Umbraco.Web.UI.NetCore.csproj +++ b/src/Umbraco.Web.UI.NetCore/Umbraco.Web.UI.NetCore.csproj @@ -1,4 +1,4 @@ - + net5.0 @@ -28,7 +28,6 @@ - @@ -38,7 +37,6 @@ - @@ -46,7 +44,6 @@ - @@ -64,9 +61,9 @@ - +