private void Load() { using (new Tracer(this)) { lock (_loadLock) { // NOTE: intentionally setting LastRefresh first, because while loading other classes (e.g. BinaryFileManager) may be using LastRefresh to detect stale content. LastRefresh = DateTime.Now; List <string> mediaPatterns = new List <string>(); VersionData versionData = null; try { LoadStaticContentItem("/version.json", ref versionData); IsHtmlDesignPublished = true; } catch (DxaItemNotFoundException) { //it may be that the version json file is 'unmanaged', ie just placed on the filesystem manually //in which case we try to load it directly - the HTML Design is thus not published from CMS IsHtmlDesignPublished = false; string versionJsonPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, SiteConfiguration.SystemFolder, @"assets\version.json"); if (File.Exists(versionJsonPath)) { string versionJson = File.ReadAllText(versionJsonPath); versionData = JsonConvert.DeserializeObject <VersionData>(versionJson); Log.Info("Obtained '{0}' directly from file system.", versionJsonPath); } else { Log.Warn("HTML design is not published nor does file '{0}' exist on disk. Setting version to v0.0", versionJsonPath); versionData = new VersionData { Version = "v0.0" }; } } Version = versionData.Version; LocalizationData localizationData = null; LoadStaticContentItem("config/_all.json", ref localizationData); SetData(localizationData); if (_data.MediaRoot != null) { string mediaRoot = _data.MediaRoot; if (!mediaRoot.StartsWith("/")) { // SDL Web 8 context-relative URL mediaRoot = string.Format("{0}/{1}", Path, mediaRoot); } if (!mediaRoot.EndsWith("/")) { mediaRoot += "/"; } mediaPatterns.Add(string.Format("^{0}.*", mediaRoot)); } if (_data.SiteLocalizations != null) { ILocalizationResolver localizationResolver = SiteConfiguration.LocalizationResolver; SiteLocalizations = new List <Localization>(); foreach (LocalizationData siteLocalizationData in _data.SiteLocalizations) { try { Localization siteLocalization = localizationResolver.GetLocalization(siteLocalizationData.Id); if (siteLocalization.LastRefresh == DateTime.MinValue) { siteLocalization.SetData(siteLocalizationData); } SiteLocalizations.Add(siteLocalization); } catch (DxaUnknownLocalizationException) { Log.Error("Unknown localization ID '{0}' specified in SiteLocalizations for Localization [{1}].", siteLocalizationData.Id, this); } } } if (IsHtmlDesignPublished) { mediaPatterns.Add("^/favicon.ico"); mediaPatterns.Add(String.Format("^{0}/{1}/assets/.*", Path, SiteConfiguration.SystemFolder)); } mediaPatterns.Add(String.Format("^{0}/{1}/.*\\.json$", Path, SiteConfiguration.SystemFolder)); StaticContentUrlPattern = String.Join("|", mediaPatterns); _staticContentUrlRegex = new Regex(StaticContentUrlPattern, RegexOptions.IgnoreCase | RegexOptions.Compiled); Culture = GetConfigValue("core.culture"); Language = GetConfigValue("core.language"); string formats = GetConfigValue("core.dataFormats"); DataFormats = formats == null ? new List <string>() : formats.Split(',').Select(f => f.Trim()).ToList(); } } }