Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 3
0
        // 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);
        }