public static ResolvedVersionInfo ParseFrom(string path) { var versionInfo = new ResolvedVersionInfo(); foreach (var line in File.ReadAllLines(path)) { var fields = line.Split('\t'); if (fields.Length >= 3) { string itemType = fields[0]; string itemIdentity = fields[1]; string version = fields[2]; Dictionary <string, string> dict; switch (itemType) { case "RuntimeFramework": dict = versionInfo.RuntimeFramework; break; case "PackageDownload": // PackageDownload versions are enclosed in [brackets] dict = versionInfo.PackageDownload; version = version.Substring(1, version.Length - 2); break; case "TargetingPack": dict = versionInfo.TargetingPack; break; case "RuntimePack": dict = versionInfo.RuntimePack; break; case "AppHostPack": dict = versionInfo.AppHostPack; break; default: throw new InvalidOperationException("Unexpected item type: " + itemType); } dict[itemIdentity] = version; } } return(versionInfo); }
private ResolvedVersionInfo GetResolvedVersions(TestProject testProject, Action <XDocument> projectChanges = null, [CallerMemberName] string callingMethod = null, string identifier = null) { testProject.Name = "ResolvedVersionsTest"; testProject.TargetFrameworks = "netcoreapp3.0"; testProject.IsSdkProject = true; testProject.IsExe = true; testProject.AdditionalProperties["DisableImplicitFrameworkReferences"] = "true"; testProject.RuntimeIdentifier = EnvironmentInfo.GetCompatibleRid(testProject.TargetFrameworks); var testAsset = _testAssetsManager.CreateTestProject(testProject, callingMethod, identifier) .WithProjectChanges(project => { var ns = project.Root.Name.Namespace; var itemGroup = new XElement(ns + "ItemGroup"); project.Root.Add(itemGroup); var frameworkReference = new XElement(ns + "FrameworkReference", new XAttribute("Include", "Microsoft.NETCore.APP")); itemGroup.Add(frameworkReference); var knownFrameworkReferenceUpdate = new XElement(ns + "KnownFrameworkReference", new XAttribute("Update", "Microsoft.NETCore.App"), new XAttribute("DefaultRuntimeFrameworkVersion", "3.0.0-defaultversion"), new XAttribute("LatestRuntimeFrameworkVersion", "3.0.0-latestversion"), new XAttribute("TargetingPackVersion", "3.0.0-targetingpackversion")); itemGroup.Add(knownFrameworkReferenceUpdate); var knownAppHostPackUpdate = new XElement(ns + "KnownAppHostPack", new XAttribute("Update", "Microsoft.NETCore.App"), new XAttribute("AppHostPackVersion", "3.0.0-apphostversion")); itemGroup.Add(knownAppHostPackUpdate); string writeResolvedVersionsTarget = @" <Target Name=`WriteResolvedVersions` DependsOnTargets=`PrepareForBuild;ResolveFrameworkReferences`> <ItemGroup> <LinesToWrite Include=`RuntimeFramework%09%(RuntimeFramework.Identity)%09%(RuntimeFramework.Version)`/> <LinesToWrite Include=`PackageDownload%09%(PackageDownload.Identity)%09%(PackageDownload.Version)`/> <LinesToWrite Include=`TargetingPack%09%(TargetingPack.Identity)%09%(TargetingPack.PackageVersion)`/> <LinesToWrite Include=`RuntimePack%09%(RuntimePack.Identity)%09%(RuntimePack.PackageVersion)`/> <LinesToWrite Include=`AppHostPack%09%(AppHostPack.Identity)%09%(AppHostPack.PackageVersion)`/> </ItemGroup> <WriteLinesToFile File=`$(OutputPath)resolvedversions.txt` Lines=`@(LinesToWrite)` Overwrite=`true` Encoding=`Unicode`/> </Target>"; writeResolvedVersionsTarget = writeResolvedVersionsTarget.Replace('`', '"'); project.Root.Add(XElement.Parse(writeResolvedVersionsTarget)); }); if (projectChanges != null) { testAsset = testAsset.WithProjectChanges(projectChanges); } var command = new MSBuildCommand(Log, "WriteResolvedVersions", Path.Combine(testAsset.TestRoot, testProject.Name)); command.Execute() .Should() .Pass(); var outputDirectory = command.GetOutputDirectory(testProject.TargetFrameworks, runtimeIdentifier: testProject.RuntimeIdentifier); var resolvedVersions = ResolvedVersionInfo.ParseFrom(Path.Combine(outputDirectory.FullName, "resolvedversions.txt")); return(resolvedVersions); }