Example #1
0
        public void Perform()
        {
            _logger.Info("Fixing references");

            var fixator = new ReferenceFixator(_logger, _repackContext);

            if (_repackContext.PrimaryAssemblyMainModule.EntryPoint != null)
            {
                _repackContext.TargetAssemblyMainModule.EntryPoint = fixator.Fix(
                    _repackImporter.Import(_repackContext.PrimaryAssemblyDefinition.EntryPoint)).Resolve();
            }

            var targetAssemblyMainModule = _repackContext.TargetAssemblyMainModule;

            // this step travels through all TypeRefs & replaces them by matching TypeDefs
            foreach (var r in targetAssemblyMainModule.Types)
            {
                _logger.Verbose($"- Fixing references for type {r}");
                fixator.FixReferences(r);
            }
            foreach (var r in targetAssemblyMainModule.Types)
            {
                //Visibility should not be changed for Methods of Types that are on the Primary Assembly,
                //when internalize is true
                if (!_options.Internalize || !_repackContext.PrimaryAssemblyMainModule.Types.Any(x => x.FullName == r.FullName))
                {
                    fixator.FixMethodVisibility(r);
                }
            }
            fixator.FixReferences(_repackContext.TargetAssemblyDefinition.MainModule.ExportedTypes);
            fixator.FixReferences(_repackContext.TargetAssemblyDefinition.CustomAttributes);
            fixator.FixReferences(_repackContext.TargetAssemblyDefinition.SecurityDeclarations);
            fixator.FixReferences(targetAssemblyMainModule.CustomAttributes);

            // final reference cleanup (Cecil Import automatically added them)
            foreach (AssemblyDefinition asm in _repackContext.MergedAssemblies)
            {
                foreach (var refer in targetAssemblyMainModule.AssemblyReferences.ToArray())
                {
                    // remove all referenced assemblies with same name, as we didn't bother on the version when merging
                    // in case we reference same assemblies with different versions, there might be prior errors if we don't merge the 'largest one'
                    if (_options.KeepOtherVersionReferences ? refer.FullName == asm.FullName : refer.Name == asm.Name.Name)
                    {
                        targetAssemblyMainModule.AssemblyReferences.Remove(refer);
                    }
                }
            }
        }
        public void Perform()
        {
            _logger.Info("Fixing references");

            var fixator = new ReferenceFixator(_logger, _repackContext);
            if (_repackContext.PrimaryAssemblyMainModule.EntryPoint != null)
            {
                _repackContext.TargetAssemblyMainModule.EntryPoint = fixator.Fix(
                    _repackImporter.Import(_repackContext.PrimaryAssemblyDefinition.EntryPoint)).Resolve();
            }

            var targetAssemblyMainModule = _repackContext.TargetAssemblyMainModule;

            // this step travels through all TypeRefs & replaces them by matching TypeDefs
            foreach (var r in targetAssemblyMainModule.Types)
            {
                _logger.Verbose($"- Fixing references for type {r}");
                fixator.FixReferences(r);
            }
            foreach (var r in targetAssemblyMainModule.Types)
            {
                fixator.FixMethodVisibility(r);
            }
            fixator.FixReferences(_repackContext.TargetAssemblyDefinition.MainModule.ExportedTypes);
            fixator.FixReferences(_repackContext.TargetAssemblyDefinition.CustomAttributes);
            fixator.FixReferences(_repackContext.TargetAssemblyDefinition.SecurityDeclarations);
            fixator.FixReferences(targetAssemblyMainModule.CustomAttributes);

            // final reference cleanup (Cecil Import automatically added them)
            foreach (AssemblyDefinition asm in _repackContext.MergedAssemblies)
            {
                foreach (var refer in targetAssemblyMainModule.AssemblyReferences.ToArray())
                {
                    // remove all referenced assemblies with same name, as we didn't bother on the version when merging
                    // in case we reference same assemblies with different versions, there might be prior errors if we don't merge the 'largest one'
                    if (_options.KeepOtherVersionReferences ? refer.FullName == asm.FullName : refer.Name == asm.Name.Name)
                    {
                        targetAssemblyMainModule.AssemblyReferences.Remove(refer);
                    }
                }
            }
        }