示例#1
0
 public UnifiedAssemblyName(AssemblyNameExtension preUnified, AssemblyNameExtension postUnified, bool isUnified, UnificationReason unificationReason, bool isPrerequisite, bool?isRedistRoot, string redistName)
 {
     PreUnified        = preUnified;
     PostUnified       = postUnified;
     IsUnified         = isUnified;
     IsPrerequisite    = isPrerequisite;
     IsRedistRoot      = isRedistRoot;
     RedistName        = redistName;
     UnificationReason = unificationReason;
 }
示例#2
0
 public UnifiedAssemblyName(AssemblyNameExtension preUnified, AssemblyNameExtension postUnified, bool isUnified, UnificationReason unificationReason, bool isPrerequisite, bool? isRedistRoot, string redistName)
 {
     _preUnified = preUnified;
     _postUnified = postUnified;
     _isUnified = isUnified;
     _isPrerequisite = isPrerequisite;
     _isRedistRoot = isRedistRoot;
     _redistName = redistName;
     _unificationReason = unificationReason;
 }
示例#3
0
        /// <summary>
        /// Get unification information for the given assembly name. 
        /// </summary>
        /// <param name="assemblyName">The assembly name.</param>
        /// <param name="unifiedVersion">The new version of the assembly to use.</param>
        /// <param name="unificationReason">The reason this reference was unified.</param>
        /// <param name="isPrerequisite">True if this is a prereq assembly.</param>
        /// <returns>True if there was a unification.</returns>
        private bool UnifyAssemblyNameVersions
        (
            AssemblyNameExtension assemblyName,
            out Version unifiedVersion,
            out UnificationReason unificationReason,
            out bool isPrerequisite,
            out bool? isRedistRoot,
            out string redistName
        )
        {
            unifiedVersion = assemblyName.Version;
            isPrerequisite = false;
            isRedistRoot = null;
            redistName = null;
            unificationReason = UnificationReason.DidntUnify;

            // If there's no version, for example in a simple name, then no remapping is possible.
            if (assemblyName.Version == null)
            {
                return false;
            }

            // Try for a remapped assemblies unification.
            if (_remappedAssemblies != null)
            {
                foreach (DependentAssembly remappedAssembly in _remappedAssemblies)
                {
                    // First, exclude anything without the simple name match
                    AssemblyNameExtension comparisonAssembly = new AssemblyNameExtension((AssemblyName)remappedAssembly.PartialAssemblyName.Clone());
                    if (assemblyName.CompareBaseNameTo(comparisonAssembly) == 0)
                    {
                        // Comparison assembly is a partial name. Give it our version.
                        comparisonAssembly.ReplaceVersion(assemblyName.Version);

                        if (assemblyName.Equals(comparisonAssembly))
                        {
                            foreach (BindingRedirect bindingRedirect in remappedAssembly.BindingRedirects)
                            {
                                if (assemblyName.Version >= bindingRedirect.OldVersionLow && assemblyName.Version <= bindingRedirect.OldVersionHigh)
                                {
                                    // If the new version is different than the old version, then there is a unification.
                                    if (assemblyName.Version != bindingRedirect.NewVersion)
                                    {
                                        unifiedVersion = bindingRedirect.NewVersion;
                                        unificationReason = UnificationReason.BecauseOfBindingRedirect;
                                        return true;
                                    }
                                }
                            }
                        }
                    }
                }
            }

            // Try for an installed assemblies unification.
            if (_installedAssemblies != null)
            {
                _installedAssemblies.GetInfo
                (
                    assemblyName,
                    out unifiedVersion,
                    out isPrerequisite,
                    out isRedistRoot,
                    out redistName
                );

                // Was there a unification?
                if (unifiedVersion != assemblyName.Version)
                {
                    unificationReason = UnificationReason.FrameworkRetarget;
                    return assemblyName.Version != unifiedVersion;
                }
            }


            return false;
        }
示例#4
0
        internal void AddPreUnificationVersion(String referencePath, Version version, UnificationReason reason)
        {
            string key = referencePath + version.ToString() + reason.ToString();

            // Only add a reference, version, and reason once.
            UnificationVersion unificationVersion;

            if (!_preUnificationVersions.TryGetValue(key, out unificationVersion))
            {
                unificationVersion = new UnificationVersion();
                unificationVersion.referenceFullPath = referencePath;
                unificationVersion.version           = version;
                unificationVersion.reason            = reason;
                _preUnificationVersions[key]         = unificationVersion;
            }
        }
        internal void AddPreUnificationVersion(string referencePath, Version version, UnificationReason reason)
        {
            UnificationVersion version2;
            string             key = referencePath + version.ToString() + reason.ToString();

            if (!this.preUnificationVersions.TryGetValue(key, out version2))
            {
                version2 = new UnificationVersion {
                    referenceFullPath = referencePath,
                    version           = version,
                    reason            = reason
                };
                this.preUnificationVersions[key] = version2;
            }
        }
示例#6
0
        /// <summary>
        /// Add a new version number for a version of this reference 
        /// </summary>
        internal void AddPreUnificationVersion(String referencePath, Version version, UnificationReason reason)
        {
            string key = referencePath + version.ToString() + reason.ToString();

            // Only add a reference, version, and reason once.
            UnificationVersion unificationVersion;
            if (!_preUnificationVersions.TryGetValue(key, out unificationVersion))
            {
                unificationVersion = new UnificationVersion();
                unificationVersion.referenceFullPath = referencePath;
                unificationVersion.version = version;
                unificationVersion.reason = reason;
                _preUnificationVersions[key] = unificationVersion;
            }
        }
 private bool UnifyAssemblyNameVersions(AssemblyNameExtension assemblyName, out Version unifiedVersion, out UnificationReason unificationReason, out bool isPrerequisite, out bool? isRedistRoot, out string redistName)
 {
     unifiedVersion = assemblyName.Version;
     isPrerequisite = false;
     isRedistRoot = 0;
     redistName = null;
     unificationReason = UnificationReason.DidntUnify;
     if (assemblyName.Version != null)
     {
         if (this.remappedAssemblies != null)
         {
             foreach (DependentAssembly assembly in this.remappedAssemblies)
             {
                 AssemblyNameExtension that = new AssemblyNameExtension((AssemblyName) assembly.PartialAssemblyName.Clone());
                 if (assemblyName.CompareBaseNameTo(that) == 0)
                 {
                     that.ReplaceVersion(assemblyName.Version);
                     if (assemblyName.Equals(that))
                     {
                         foreach (BindingRedirect redirect in assembly.BindingRedirects)
                         {
                             if (((assemblyName.Version >= redirect.OldVersionLow) && (assemblyName.Version <= redirect.OldVersionHigh)) && (assemblyName.Version != redirect.NewVersion))
                             {
                                 unifiedVersion = redirect.NewVersion;
                                 unificationReason = UnificationReason.BecauseOfBindingRedirect;
                                 return true;
                             }
                         }
                     }
                 }
             }
         }
         if (this.installedAssemblies != null)
         {
             this.installedAssemblies.GetInfo(assemblyName, out unifiedVersion, out isPrerequisite, out isRedistRoot, out redistName);
             if (unifiedVersion != assemblyName.Version)
             {
                 unificationReason = UnificationReason.FrameworkRetarget;
                 return (assemblyName.Version != unifiedVersion);
             }
         }
     }
     return false;
 }
 internal void AddPreUnificationVersion(string referencePath, Version version, UnificationReason reason)
 {
     UnificationVersion version2;
     string key = referencePath + version.ToString() + reason.ToString();
     if (!this.preUnificationVersions.TryGetValue(key, out version2))
     {
         version2 = new UnificationVersion {
             referenceFullPath = referencePath,
             version = version,
             reason = reason
         };
         this.preUnificationVersions[key] = version2;
     }
 }