コード例 #1
0
        private Tuple<SemanticVersion, string> CreateAssembly(SortedDictionary<Tuple<SemanticVersion, string>, DllReference> cache,
                                                                string dll,
                                                                string frameworkVersionName,
                                                                FileAssemblyVersion mainAssemblyId,
                                                                IEnumerable<AssemblyReference> assemblyReferences)
        {
            Trace.TraceInformation($"ADDED : Assembly {mainAssemblyId.Item2}, {mainAssemblyId.Item1}");

            //For a specific version (Version+Name) it might exist multiple real File (SemanticVersion+Name)
            //For exampl snapshot. We store them here will see later which one to choose
            var assemblyId = new Tuple<Version, string>(mainAssemblyId.AssemblyVersion, mainAssemblyId.Item2);

            if (!ConflictingAssemblies.ContainsKey(assemblyId))
                ConflictingAssemblies.Add(assemblyId, new /**/ SortedSet<SemanticVersion>());
            ConflictingAssemblies[assemblyId].Add(mainAssemblyId.Item1);

            // While adding references we ignore assembly in the GAC
            cache.Add(mainAssemblyId,
                           new /**/ DllReference(dll,
                                                frameworkVersionName,
                                                    mainAssemblyId,
                                                    assemblyReferences.Where(
                                                        _ =>
                                                        !GacUtil.IsFullNameAssemblyInGAC(_.FullName))));
            return cache[mainAssemblyId].Id;
        }
コード例 #2
0
        private Tuple<SemanticVersion, string> UpdateAssembly(SortedDictionary<Tuple<SemanticVersion, string>, DllReference> cache, 
                                                                string dll,
                                                                string frameworkVersion,
                                                                FileAssemblyVersion mainAssemblyId,
                                                                IEnumerable<AssemblyReference> assemblyReferences)
        {
            //Not the same path, but it seems more correct as AssemblyName match dll name
            if (cache.ContainsKey(mainAssemblyId) && !mainAssemblyId.Item2.Equals(Path.GetFileNameWithoutExtension(cache[mainAssemblyId].Path))
                                                       && mainAssemblyId.Item2.Equals(Path.GetFileNameWithoutExtension(dll)))
            {
                Trace.TraceInformation($"UPDATE : {mainAssemblyId.Item2}, {mainAssemblyId.Item1} found in {dll} replace {cache[mainAssemblyId].Path} as assembly name match dll name");
                cache[mainAssemblyId].Path = dll;
            }
            //Not the same path, ignore it
            else if(cache.ContainsKey(mainAssemblyId) && !dll.Equals(cache[mainAssemblyId].Path, StringComparison.OrdinalIgnoreCase))
            {
                Trace.TraceInformation($"IGNORE : {mainAssemblyId.Item2}, {mainAssemblyId.Item1} found in {dll} already registered from {cache[mainAssemblyId].Path}");
                return cache[mainAssemblyId].Id;
            }

            var assembly = cache[mainAssemblyId];

            //We never know it might need updated. let's do it everytime
            assembly.FrameworkVersion = frameworkVersion;

            //Update References if References Changed
            var newReferences = assemblyReferences.Where(_ => !GacUtil.IsFullNameAssemblyInGAC(_.FullName));
            if (!newReferences.All(_ => Enumerable.Contains(cache[mainAssemblyId].AssemblyReferences, _)))
            {
                Trace.TraceInformation($"UPDATE : Dependencies for {mainAssemblyId.Item2}, {mainAssemblyId.Item1} has changed");
                cache[mainAssemblyId].AssemblyReferences = newReferences;    
            }

            return assembly.Id;
        }
コード例 #3
0
        private Tuple<SemanticVersion, string> CreateOrUpdateAssembly(SortedDictionary<Tuple<SemanticVersion, string>, DllReference> cache,
                                                                      string dll,
                                                                      string frameworkVersionName,
                                                                      FileAssemblyVersion mainAssemblyId,
                                                                      IEnumerable<AssemblyReference> assemblyReferences)
        {

            if (cache.ContainsKey(mainAssemblyId))
                return UpdateAssembly(cache, dll, frameworkVersionName, mainAssemblyId, assemblyReferences);
            return CreateAssembly(cache, dll, frameworkVersionName, mainAssemblyId, assemblyReferences);
        }