File: GivenThatWeWantToPackANetFrameworkLibrary.cs
Web Access
Project: ..\..\..\test\Microsoft.NET.Pack.Tests\Microsoft.NET.Pack.Tests.csproj (Microsoft.NET.Pack.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
#nullable disable
 
namespace Microsoft.NET.Pack.Tests
{
    public class GivenThatWeWantToPackANetFrameworkLibrary : SdkTest
    {
        public GivenThatWeWantToPackANetFrameworkLibrary(ITestOutputHelper log) : base(log)
        {
        }
 
        [WindowsOnlyFact]
        public void ImplicitReferencesAreNotIncludedAsFrameworkReferences()
        {
            TestProject testProject = new()
            {
                Name = "PackImplicitReferences",
                TargetFrameworks = "net462",
                IsExe = false
            };
 
            var nuspecPath = PackAndGetNuspecPath(testProject);
 
            var nuspec = XDocument.Load(nuspecPath);
            var ns = nuspec.Root.Name.Namespace;
 
            var frameworkAssemblies = nuspec.Root
                .Element(ns + "metadata")
                .Element(ns + "frameworkAssemblies");
 
            frameworkAssemblies.Should().BeNull();
        }
 
        [WindowsOnlyFact]
        public void ExplicitReferencesAreIncludedAsFrameworkReferences()
        {
            TestProject testProject = new()
            {
                Name = "PackImplicitReferences",
                TargetFrameworks = "net462",
                IsExe = false
            };
 
            var nuspecPath = PackAndGetNuspecPath(testProject,
                "PackImplicitRefs",
                p =>
                {
                    var pns = p.Root.Name.Namespace;
 
                    p.Root.Add(new XElement(pns + "ItemGroup",
                        new XElement(pns + "Reference", new XAttribute("Include", "System")),
                        new XElement(pns + "Reference", new XAttribute("Include", "System.Xml.Linq"))));
                });
 
            var nuspec = XDocument.Load(nuspecPath);
            var ns = nuspec.Root.Name.Namespace;
 
            var frameworkAssemblies = nuspec.Root
                .Element(ns + "metadata")
                .Element(ns + "frameworkAssemblies")
                .Elements(ns + "frameworkAssembly");
 
            frameworkAssemblies.Count().Should().Be(2);
            frameworkAssemblies.Should().Contain(i => i.Attribute("assemblyName").Value == "System");
            frameworkAssemblies.Should().Contain(i => i.Attribute("assemblyName").Value == "System.Xml.Linq");
        }
 
        private string PackAndGetNuspecPath(TestProject testProject, string identifier = null, Action<XDocument> xmlAction = null)
        {
            var testProjectInstance = _testAssetsManager.CreateTestProject(testProject, testProject.Name, identifier);
 
            if (xmlAction != null)
            {
                testProjectInstance = testProjectInstance.WithProjectChanges(xmlAction);
            }
 
            var packCommand = new PackCommand(Log, testProjectInstance.TestRoot, testProject.Name);
 
            packCommand.Execute()
                .Should()
                .Pass();
 
            string nuspecPath = packCommand.GetIntermediateNuspecPath();
            return nuspecPath;
 
        }
    }
}