Exemplo n.º 1
0
            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);
            }
Exemplo n.º 2
0
        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);
        }