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); } } } }