/// <summary> /// Returns a string that contains the URI for display in a JournalEntry. /// It removes pack://application:,,,/ and any component, and replaces /// pack://siteoforigin:,,,/ with the actual site of origin URI. /// </summary> /// <param name="uri">The URI to display</param> /// <param name="siteOfOrigin">The site of origin URI</param> /// <returns>display name</returns> internal static string GetDisplayName(Uri uri, Uri siteOfOrigin) { // In case this is a fragment navigation in a tree that was not navigated to by URI... if (!uri.IsAbsoluteUri) { return(uri.ToString()); } bool isPack = String.Compare(uri.Scheme, PackUriHelper.UriSchemePack, StringComparison.OrdinalIgnoreCase) == 0; string displayName; if (isPack) { Uri relative = BaseUriHelper.MakeRelativeToSiteOfOriginIfPossible(uri); if (!relative.IsAbsoluteUri) { displayName = (new Uri(siteOfOrigin, relative)).ToString(); } else { string relativeUri = uri.AbsolutePath + uri.Query + uri.Fragment; string part, assy, assyVers, assyKey; BaseUriHelper.GetAssemblyNameAndPart(new Uri(relativeUri, UriKind.Relative), out part, out assy, out assyVers, out assyKey); if (!string.IsNullOrEmpty(assy)) { displayName = part; } else { displayName = relativeUri; } } } else { displayName = uri.ToString(); } if (!string.IsNullOrEmpty(displayName) && displayName[0] == '/') { displayName = displayName.Substring(1); } return(displayName); }
// Token: 0x06002905 RID: 10501 RVA: 0x000BDD2C File Offset: 0x000BBF2C internal static string GetDisplayName(Uri uri, Uri siteOfOrigin) { if (!uri.IsAbsoluteUri) { return(uri.ToString()); } bool flag = string.Compare(uri.Scheme, PackUriHelper.UriSchemePack, StringComparison.OrdinalIgnoreCase) == 0; string text; if (flag) { Uri uri2 = BaseUriHelper.MakeRelativeToSiteOfOriginIfPossible(uri); if (!uri2.IsAbsoluteUri) { text = new Uri(siteOfOrigin, uri2).ToString(); } else { string text2 = uri.AbsolutePath + uri.Query + uri.Fragment; string text3; string value; string text4; string text5; BaseUriHelper.GetAssemblyNameAndPart(new Uri(text2, UriKind.Relative), out text3, out value, out text4, out text5); if (!string.IsNullOrEmpty(value)) { text = text3; } else { text = text2; } } } else { text = uri.ToString(); } if (!string.IsNullOrEmpty(text) && text[0] == '/') { text = text.Substring(1); } return(text); }
// If the Uri provided is a pack Uri calling out an assembly and the assembly name matches that from assemblyInfo // this method will append the version taken from assemblyInfo, provided the Uri does not already have a version, // if the Uri provided the public Key token we must also verify that it matches the one in assemblyInfo. // We only add the version if the Uri is missing both the version and the key, otherwise returns null. // If the Uri is not a pack Uri, or we can't extract the information we need this method returns null. static internal Uri AppendAssemblyVersion(Uri uri, Assembly assemblyInfo) { Uri source = null; Uri baseUri = null; // assemblyInfo.GetName does not work in PartialTrust, so do this instead. AssemblyName currAssemblyName = new AssemblyName(assemblyInfo.FullName); string version = currAssemblyName.Version?.ToString(); if (uri != null && !string.IsNullOrEmpty(version)) { if (uri.IsAbsoluteUri) { if (IsPackApplicationUri(uri)) { // Extract the relative Uri and keep the base Uri so we can // put them back together after we append the version. source = new Uri(uri.AbsolutePath, UriKind.Relative); baseUri = new Uri(uri.GetLeftPart(UriPartial.Authority), UriKind.Absolute); } } else { source = uri; } if (source != null) { string appendedUri; string assemblyName; string assemblyVersion; string assemblyKey; string partName; BaseUriHelper.GetAssemblyNameAndPart(source, out partName, out assemblyName, out assemblyVersion, out assemblyKey); bool assemblyKeyProvided = !string.IsNullOrEmpty(assemblyKey); // Make sure we: // 1) Successfully extracted the assemblyName from the Uri. // 2) No assembly version was already provided in the Uri. // 3) The assembly short name matches the name in assemblyInfo. // 4) If a public key token was provided in the Uri, verify // that it matches the token in asssemblyInfo. if (!string.IsNullOrEmpty(assemblyName) && string.IsNullOrEmpty(assemblyVersion) && assemblyName.Equals(currAssemblyName.Name, StringComparison.Ordinal) && (!assemblyKeyProvided || AssemblyMatchesKeyString(currAssemblyName, assemblyKey))) { StringBuilder uriStringBuilder = new StringBuilder(); uriStringBuilder.Append('/'); uriStringBuilder.Append(assemblyName); uriStringBuilder.Append(COMPONENT_DELIMITER); uriStringBuilder.Append(VERSION); uriStringBuilder.Append(version); if (assemblyKeyProvided) { uriStringBuilder.Append(COMPONENT_DELIMITER); uriStringBuilder.Append(assemblyKey); } uriStringBuilder.Append(COMPONENT); uriStringBuilder.Append('/'); uriStringBuilder.Append(partName); appendedUri = uriStringBuilder.ToString(); if (baseUri != null) { return(new Uri(baseUri, appendedUri)); } return(new Uri(appendedUri, UriKind.Relative)); } } } return(null); }