public string RemoveTypeAssemblyInformation_GivenFullTypeName_AssemblySpecificDataIsRemoved(string fullTypeName) { var primaryAssembly = AssemblyDefinition.CreateAssembly( new AssemblyNameDefinition("MainApp", new Version(1, 0, 0, 0)), "MainApp.exe", ModuleKind.Console); var otherAssemblies = new[] { AssemblyDefinition.CreateAssembly( new AssemblyNameDefinition("ClassLibrary", new Version(1, 0)), "ClassLibrary.dll", ModuleKind.Dll) }; var repackContext = Mock.Of <IRepackContext>(c => c.PrimaryAssemblyDefinition == primaryAssembly && c.OtherAssemblies == otherAssemblies); var patcher = new BamlResourcePatcher(repackContext); return(patcher.RemoveTypeAssemblyInformation(fullTypeName)); }
public void Perform() { _logger.Info("Processing resources"); // merge resources IEnumerable <string> repackList = new List <string>(); Dictionary <string, List <int> > ikvmExportsLists = new Dictionary <string, List <int> >(); if (!_options.NoRepackRes) { repackList = _repackContext.MergedAssemblies.Select(a => a.FullName).ToList(); } bool areCollectedStreamsWritten = false; var bamlStreamCollector = new BamlStreamCollector(_logger, _repackContext); var bamlResourcePatcher = new BamlResourcePatcher(_repackContext); var commonProcessors = new List <IResProcessor> { new StringResourceProcessor(_repackContext), new GenericResourceProcessor(_repackContext) }; var primaryAssemblyProcessors = new[] { bamlResourcePatcher }.Union(commonProcessors).ToList(); var otherAssemblyProcessors = new List <IResProcessor> { bamlResourcePatcher, bamlStreamCollector }.Union(commonProcessors).ToList(); // Primary Assembly *must* be the last one in order to properly gather the resources // from dependencies var assembliesList = _repackContext.OtherAssemblies.Concat(new[] { _repackContext.PrimaryAssemblyDefinition }); foreach (var assembly in assembliesList) { bool isPrimaryAssembly = assembly == _repackContext.PrimaryAssemblyDefinition; var assemblyProcessors = isPrimaryAssembly ? primaryAssemblyProcessors : otherAssemblyProcessors; foreach (var resource in assembly.Modules.SelectMany(x => x.Resources)) { if (resource.Name == ILRepackListResourceName) { if (!_options.NoRepackRes && resource is EmbeddedResource) { repackList = repackList.Union(GetRepackListFromResource((EmbeddedResource)resource)); } } else if (resource.Name == "ikvm.exports") { if (resource is EmbeddedResource) { ikvmExportsLists = MergeIkvmExports( ikvmExportsLists, GetIkvmExportsListsFromResource((EmbeddedResource)resource)); } } else { if (!_options.AllowDuplicateResources && _targetAssemblyMainModule.Resources.Any(x => x.Name == resource.Name)) { // Not much we can do about 'ikvm__META-INF!MANIFEST.MF' _logger.Warn("Ignoring duplicate resource " + resource.Name); } else { _logger.Verbose("- Importing " + resource.Name); var newResource = resource; switch (resource.ResourceType) { case ResourceType.AssemblyLinked: // TODO _logger.Warn("AssemblyLinkedResource reference may need to be fixed (to link to newly created assembly)" + resource.Name); break; case ResourceType.Linked: // TODO ? (or not) break; case ResourceType.Embedded: var er = (EmbeddedResource)resource; if (er.Name.EndsWith(".resources")) { // we don't want to write the bamls to other embedded resource files bool shouldWriteCollectedBamlStreams = isPrimaryAssembly && $"{assembly.Name.Name}.g.resources".Equals(er.Name); if (shouldWriteCollectedBamlStreams) { areCollectedStreamsWritten = true; } newResource = FixResxResource(assembly, er, assemblyProcessors, shouldWriteCollectedBamlStreams ? bamlStreamCollector : null); } break; } _targetAssemblyMainModule.Resources.Add(newResource); } } } } if (ikvmExportsLists.Count > 0) { _targetAssemblyMainModule.Resources.Add( GenerateIkvmExports(ikvmExportsLists)); } if (!_options.NoRepackRes) { _targetAssemblyMainModule.Resources.Add( GenerateRepackListResource(repackList.ToList())); } CreateNewBamlResourceIfNeeded(areCollectedStreamsWritten, bamlStreamCollector); }
public string RemoveTypeAssemblyInformation_GivenFullTypeName_AssemblySpecificDataIsRemoved(string fullTypeName) { return(BamlResourcePatcher.RemoveTypeAssemblyInformation(fullTypeName)); }