public override bool Execute() { Log.LogDebugMessage("CheckTargetFrameworks Task"); Log.LogDebugMessage(" TargetFrameworkVersion: {0}", TargetFrameworkVersion); Log.LogDebugMessage(" ProjectFile: {0}", ProjectFile); Log.LogDebugTaskItems(" ResolvedUserAssemblies: {0}", ResolvedAssemblies); res = new DirectoryAssemblyResolver(Log.LogWarning, loadDebugSymbols: false); foreach (var assembly in ResolvedAssemblies) { res.Load(Path.GetFullPath(assembly.ItemSpec)); var apiLevel = ExtractApiLevel(assembly); if (apiLevel > 0) { Log.LogDebugMessage("{0}={1}", Path.GetFileNameWithoutExtension(assembly.ItemSpec), apiLevel); apiLevels.Add(assembly, apiLevel); } } var mainapiLevel = AndroidVersion.TryOSVersionToApiLevel(TargetFrameworkVersion); foreach (var item in apiLevels.Where(x => mainapiLevel < x.Value)) { var itemOSVersion = AndroidVersion.TryApiLevelToOSVersion(item.Value); Log.LogWarning(null, "XA0105", null, ProjectFile, 0, 0, 0, 0, "The $(TargetFrameworkVersion) for {0} (v{1}) is greater than the $(TargetFrameworkVersion) for your project ({2}). " + "You need to increase the $(TargetFrameworkVersion) for your project.", Path.GetFileName(item.Key.ItemSpec), itemOSVersion, TargetFrameworkVersion); } return(!Log.HasLoggedErrors); }
Version GetJavaVersionForFramework(string targetFrameworkVersion) { var apiLevel = AndroidVersion.TryOSVersionToApiLevel(targetFrameworkVersion); if (apiLevel >= 24) { return(new Version(1, 8)); } else if (apiLevel == 23) { return(new Version(1, 7)); } else { return(new Version(1, 6)); } }
int ExtractApiLevel(ITaskItem ass) { Log.LogDebugMessage(ass.ItemSpec); foreach (var ca in res.GetAssembly(ass.ItemSpec).CustomAttributes) { switch (ca.AttributeType.FullName) { case "System.Runtime.Versioning.TargetFrameworkAttribute": foreach (var p in ca.ConstructorArguments) { var value = p.Value.ToString(); if (value.StartsWith("MonoAndroid")) { var values = value.Split('='); return(AndroidVersion.TryOSVersionToApiLevel(values[1])); } } break; } } return(0); }