diff --git a/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishReadyToRun.cs b/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishReadyToRun.cs index 94664b81be79..5672e1c9dd4a 100644 --- a/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishReadyToRun.cs +++ b/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishReadyToRun.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using System.Reflection.Metadata; using System.Reflection.PortableExecutable; @@ -59,7 +60,7 @@ public void It_creates_readytorun_images_for_all_assemblies_except_excluded_ones "ClassLib"); testProject.AdditionalProperties["PublishReadyToRun"] = "True"; - testProject.AdditionalItems["PublishReadyToRunExclude"] = "Classlib.dll"; + testProject.AdditionalItems["PublishReadyToRunExclude"] = new Dictionary { ["Include"] = "Classlib.dll" }; var testProjectInstance = _testAssetsManager.CreateTestProject(testProject); diff --git a/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToRunILLink.cs b/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToRunILLink.cs index b7921e145746..ea235bb135f9 100644 --- a/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToRunILLink.cs +++ b/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToRunILLink.cs @@ -493,12 +493,13 @@ public void ILLink_respects_feature_settings_from_host_config() var targetFramework = "net5.0"; var rid = EnvironmentInfo.GetCompatibleRid(targetFramework); - var testProject = CreateTestProjectForILLinkTesting(targetFramework, projectName, referenceProjectName); - // Set up a conditional feature substitution for the "FeatureDisabled" property - AddFeatureDefinition(testProject, referenceProjectName); + var testProject = CreateTestProjectForILLinkTesting(targetFramework, projectName, referenceProjectName, + // Reference the classlib to ensure its XML is processed. + addAssemblyReference: true, + // Set up a conditional feature substitution for the "FeatureDisabled" property + modifyReferencedProject: (referencedProject) => AddFeatureDefinition(referencedProject, referenceProjectName)); var testAsset = _testAssetsManager.CreateTestProject(testProject) .WithProjectChanges(project => EnableNonFrameworkTrimming(project)) - .WithProjectChanges(project => EmbedSubstitutions(project)) // Set a matching RuntimeHostConfigurationOption, with Trim = "true" .WithProjectChanges(project => AddRuntimeConfigOption(project, trim: true)) .WithProjectChanges(project => AddRootDescriptor(project, $"{referenceProjectName}.xml")); @@ -525,12 +526,13 @@ public void ILLink_ignores_host_config_settings_with_link_false() var targetFramework = "net5.0"; var rid = EnvironmentInfo.GetCompatibleRid(targetFramework); - var testProject = CreateTestProjectForILLinkTesting(targetFramework, projectName, referenceProjectName); - // Set up a conditional feature substitution for the "FeatureDisabled" property - AddFeatureDefinition(testProject, referenceProjectName); + var testProject = CreateTestProjectForILLinkTesting(targetFramework, projectName, referenceProjectName, + // Reference the classlib to ensure its XML is processed. + addAssemblyReference: true, + // Set up a conditional feature substitution for the "FeatureDisabled" property + modifyReferencedProject: (referencedProject) => AddFeatureDefinition(referencedProject, referenceProjectName)); var testAsset = _testAssetsManager.CreateTestProject(testProject) .WithProjectChanges(project => EnableNonFrameworkTrimming(project)) - .WithProjectChanges(project => EmbedSubstitutions(project)) // Set a matching RuntimeHostConfigurationOption, with Trim = "false" .WithProjectChanges(project => AddRuntimeConfigOption(project, trim: false)) .WithProjectChanges(project => AddRootDescriptor(project, $"{referenceProjectName}.xml")); @@ -1116,28 +1118,23 @@ private void EnableNonFrameworkTrimming(XDocument project) static readonly string substitutionsFilename = "ILLink.Substitutions.xml"; - private void EmbedSubstitutions(XDocument project) - { - var ns = project.Root.Name.Namespace; - - project.Root.Add(new XElement(ns + "ItemGroup", - new XElement("EmbeddedResource", - new XAttribute("Include", substitutionsFilename), - new XElement("LogicalName", substitutionsFilename)))); - } - - private void AddFeatureDefinition(TestProject testProject, string referenceAssemblyName) + private void AddFeatureDefinition(TestProject testProject, string assemblyName) { // Add a feature definition that replaces the FeatureDisabled property when DisableFeature is true. testProject.EmbeddedResources[substitutionsFilename] = $@" - + "; + + testProject.AdditionalItems["EmbeddedResource"] = new Dictionary { + ["Include"] = substitutionsFilename, + ["LogicalName"] = substitutionsFilename + }; } private void AddRuntimeConfigOption(XDocument project, bool trim) @@ -1221,7 +1218,9 @@ public class Derived : Base string referenceProjectName = null, bool usePackageReference = true, [CallerMemberName] string callingMethod = "", - string referenceProjectIdentifier = "") + string referenceProjectIdentifier = "", + Action modifyReferencedProject = null, + bool addAssemblyReference = false) { var testProject = new TestProject() { @@ -1239,11 +1238,24 @@ public static void Main() { Console.WriteLine(""Hello world""); } -} "; + if (addAssemblyReference) + { + testProject.SourceFiles[$"{mainProjectName}.cs"] += @" + public static void UseClassLib() + { + ClassLib.UsedMethod(); + } +}"; + } else { + testProject.SourceFiles[$"{mainProjectName}.cs"] += @"}"; + } + if (referenceProjectName == null) { + if (addAssemblyReference) + throw new ArgumentException("Adding an assembly reference requires a project to reference."); return testProject; } @@ -1258,8 +1270,13 @@ public static void Main() }; referenceProject.SourceFiles[$"{referenceProjectName}.cs"] = @" using System; + public class ClassLib { + public static void UsedMethod() + { + } + public void UnusedMethod() { } @@ -1283,6 +1300,8 @@ public static void FeatureImplementation() } } "; + if (modifyReferencedProject != null) + modifyReferencedProject(referenceProject); if (usePackageReference) { diff --git a/src/Tests/Microsoft.NET.TestFramework/ProjectConstruction/TestProject.cs b/src/Tests/Microsoft.NET.TestFramework/ProjectConstruction/TestProject.cs index 6d9ae14a1dd4..fd426f9abd2d 100644 --- a/src/Tests/Microsoft.NET.TestFramework/ProjectConstruction/TestProject.cs +++ b/src/Tests/Microsoft.NET.TestFramework/ProjectConstruction/TestProject.cs @@ -59,7 +59,7 @@ public TestProject([CallerMemberName] string name = null) public Dictionary AdditionalProperties { get; } = new Dictionary(); - public Dictionary AdditionalItems { get; } = new Dictionary(); + public Dictionary> AdditionalItems { get; } = new Dictionary>(); public IEnumerable TargetFrameworkIdentifiers { @@ -230,9 +230,10 @@ internal void Create(TestAsset targetTestAsset, string testProjectsSourceFolder, additionalItemGroup = new XElement(ns + "ItemGroup"); projectXml.Root.Add(packageReferenceItemGroup); } - additionalItemGroup.Add(new XElement( - ns + additionalItem.Key, - new XAttribute("Include", additionalItem.Value))); + var item = new XElement(ns + additionalItem.Key); + foreach (var (attributeKey, attributeValue) in additionalItem.Value) + item.Add(new XAttribute(attributeKey, attributeValue)); + additionalItemGroup.Add(item); } }