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 @@
-
+