void Execute(MetadataResolver resolver) { foreach (var dir in ReferenceAssembliesDirectory.Split(new char [] { ';' }, StringSplitOptions.RemoveEmptyEntries)) { resolver.AddSearchDirectory(dir); } var assemblies = new Dictionary <string, ITaskItem> (Assemblies.Length); var topAssemblyReferences = new List <string> (Assemblies.Length); try { foreach (var assembly in Assemblies) { // Add each user assembly and all referenced assemblies (recursive) string resolved_assembly = resolver.Resolve(assembly.ItemSpec); bool refAssembly = !string.IsNullOrEmpty(assembly.GetMetadata("NuGetPackageId")) && resolved_assembly.Contains($"{Path.DirectorySeparatorChar}ref{Path.DirectorySeparatorChar}"); if (refAssembly || MonoAndroidHelper.IsReferenceAssembly(resolved_assembly)) { // Resolve "runtime" library var lockFile = lock_file.Value; if (lockFile != null) { resolved_assembly = ResolveRuntimeAssemblyForReferenceAssembly(lockFile, assembly.ItemSpec); } if (lockFile == null || resolved_assembly == null) { var file = resolved_assembly ?? assembly.ItemSpec; LogCodedWarning("XA0107", file, 0, Properties.Resources.XA0107_Ignoring, file); continue; } } topAssemblyReferences.Add(resolved_assembly); resolver.AddSearchDirectory(Path.GetDirectoryName(resolved_assembly)); var taskItem = new TaskItem(assembly) { ItemSpec = Path.GetFullPath(resolved_assembly), }; if (string.IsNullOrEmpty(taskItem.GetMetadata("ReferenceAssembly"))) { taskItem.SetMetadata("ReferenceAssembly", taskItem.ItemSpec); } string assemblyName = Path.GetFileNameWithoutExtension(resolved_assembly); assemblies [assemblyName] = taskItem; } } catch (Exception ex) { LogCodedError("XA2007", Properties.Resources.XA2007, ex); return; } try { foreach (var assembly in topAssemblyReferences) { AddAssemblyReferences(resolver, assemblies, assembly, null); } } catch (Exception ex) { LogCodedError("XA2007", Properties.Resources.XA2007, ex); return; } // Add I18N assemblies if needed AddI18nAssemblies(resolver, assemblies); var mainapiLevel = MonoAndroidHelper.SupportedVersions.GetApiLevelFromFrameworkVersion(TargetFrameworkVersion); foreach (var item in api_levels.Where(x => mainapiLevel < x.Value)) { var itemOSVersion = MonoAndroidHelper.SupportedVersions.GetFrameworkVersionFromApiLevel(item.Value); LogCodedWarning("XA0105", ProjectFile, 0, Properties.Resources.XA0105, Path.GetFileName(item.Key), itemOSVersion, TargetFrameworkVersion); } var resolvedAssemblies = new List <ITaskItem> (assemblies.Count); var resolvedSymbols = new List <ITaskItem> (assemblies.Count); var resolvedFrameworkAssemblies = new List <ITaskItem> (assemblies.Count); var resolvedUserAssemblies = new List <ITaskItem> (assemblies.Count); foreach (var assembly in assemblies.Values) { var mdb = assembly + ".mdb"; var pdb = Path.ChangeExtension(assembly.ItemSpec, "pdb"); if (File.Exists(mdb)) { resolvedSymbols.Add(new TaskItem(mdb)); } if (File.Exists(pdb) && Files.IsPortablePdb(pdb)) { resolvedSymbols.Add(new TaskItem(pdb)); } resolvedAssemblies.Add(assembly); if (MonoAndroidHelper.IsFrameworkAssembly(assembly.ItemSpec, checkSdkPath: true)) { resolvedFrameworkAssemblies.Add(assembly); } else { resolvedUserAssemblies.Add(assembly); } assembly.SetDestinationSubPath(); } ResolvedAssemblies = resolvedAssemblies.ToArray(); ResolvedSymbols = resolvedSymbols.ToArray(); ResolvedFrameworkAssemblies = resolvedFrameworkAssemblies.ToArray(); ResolvedUserAssemblies = resolvedUserAssemblies.ToArray(); ResolvedDoNotPackageAttributes = do_not_package_atts.ToArray(); }
void Execute(MetadataResolver resolver) { foreach (var dir in ReferenceAssembliesDirectory.Split(new char [] { ';' }, StringSplitOptions.RemoveEmptyEntries)) { resolver.AddSearchDirectory(dir); } var assemblies = new Dictionary <string, ITaskItem> (Assemblies.Length); var topAssemblyReferences = new List <string> (Assemblies.Length); var logger = new NuGetLogger((s) => { LogDebugMessage("{0}", s); }); LockFile lockFile = null; if (!string.IsNullOrEmpty(ProjectAssetFile) && File.Exists(ProjectAssetFile)) { lockFile = LockFileUtilities.GetLockFile(ProjectAssetFile, logger); } try { foreach (var assembly in Assemblies) { // Add each user assembly and all referenced assemblies (recursive) string resolved_assembly = resolver.Resolve(assembly.ItemSpec); if (MonoAndroidHelper.IsReferenceAssembly(resolved_assembly)) { // Resolve "runtime" library if (lockFile != null) { resolved_assembly = ResolveRuntimeAssemblyForReferenceAssembly(lockFile, assembly.ItemSpec); } if (lockFile == null || resolved_assembly == null) { LogCodedWarning("XA0107", resolved_assembly, 0, "Ignoring {0} as it is a Reference Assembly", resolved_assembly); continue; } } LogDebugMessage($"Adding {resolved_assembly} to topAssemblyReferences"); topAssemblyReferences.Add(resolved_assembly); resolver.AddSearchDirectory(Path.GetDirectoryName(resolved_assembly)); var taskItem = new TaskItem(assembly) { ItemSpec = Path.GetFullPath(resolved_assembly), }; if (string.IsNullOrEmpty(taskItem.GetMetadata("ReferenceAssembly"))) { taskItem.SetMetadata("ReferenceAssembly", taskItem.ItemSpec); } string assemblyName = Path.GetFileNameWithoutExtension(resolved_assembly); assemblies [assemblyName] = taskItem; } } catch (Exception ex) { LogError("Exception while loading assemblies: {0}", ex); return; } try { foreach (var assembly in topAssemblyReferences) { AddAssemblyReferences(resolver, assemblies, assembly, null); } } catch (Exception ex) { LogError("Exception while loading assemblies: {0}", ex); return; } // Add I18N assemblies if needed AddI18nAssemblies(resolver, assemblies); var mainapiLevel = MonoAndroidHelper.SupportedVersions.GetApiLevelFromFrameworkVersion(TargetFrameworkVersion); foreach (var item in api_levels.Where(x => mainapiLevel < x.Value)) { var itemOSVersion = MonoAndroidHelper.SupportedVersions.GetFrameworkVersionFromApiLevel(item.Value); Log.LogCodedWarning("XA0105", ProjectFile, 0, "The $(TargetFrameworkVersion) for {0} ({1}) is greater than the $(TargetFrameworkVersion) for your project ({2}). " + "You need to increase the $(TargetFrameworkVersion) for your project.", Path.GetFileName(item.Key), itemOSVersion, TargetFrameworkVersion); } var resolvedAssemblies = new List <ITaskItem> (assemblies.Count); var resolvedSymbols = new List <ITaskItem> (assemblies.Count); var resolvedFrameworkAssemblies = new List <ITaskItem> (assemblies.Count); var resolvedUserAssemblies = new List <ITaskItem> (assemblies.Count); foreach (var assembly in assemblies.Values) { var mdb = assembly + ".mdb"; var pdb = Path.ChangeExtension(assembly.ItemSpec, "pdb"); if (File.Exists(mdb)) { resolvedSymbols.Add(new TaskItem(mdb)); } if (File.Exists(pdb) && Files.IsPortablePdb(pdb)) { resolvedSymbols.Add(new TaskItem(pdb)); } resolvedAssemblies.Add(assembly); if (MonoAndroidHelper.IsFrameworkAssembly(assembly.ItemSpec, checkSdkPath: true)) { resolvedFrameworkAssemblies.Add(assembly); } else { resolvedUserAssemblies.Add(assembly); } } ResolvedAssemblies = resolvedAssemblies.ToArray(); ResolvedSymbols = resolvedSymbols.ToArray(); ResolvedFrameworkAssemblies = resolvedFrameworkAssemblies.ToArray(); ResolvedUserAssemblies = resolvedUserAssemblies.ToArray(); ResolvedDoNotPackageAttributes = do_not_package_atts.ToArray(); }