diff --git a/src/Microsoft.DotNet.Build.Tasks.Feed.Tests/BuildModelFactoryTests.cs b/src/Microsoft.DotNet.Build.Tasks.Feed.Tests/BuildModelFactoryTests.cs index 37cbb7205a6..0906695c73a 100644 --- a/src/Microsoft.DotNet.Build.Tasks.Feed.Tests/BuildModelFactoryTests.cs +++ b/src/Microsoft.DotNet.Build.Tasks.Feed.Tests/BuildModelFactoryTests.cs @@ -363,6 +363,19 @@ public void RoundTripFromTaskItemsToFileToXml() new TaskItem(localPackagePath, new Dictionary() { { "CertificateName", "IHasACert2" } + }), + // Added per issue: dotnet/arcade#7064 + new TaskItem("Microsoft.DiaSymReader.dll", new Dictionary() + { + { "CertificateName", "MicrosoftWin8WinBlue" }, + { "TargetFramework", ".NETFramework,Version=v2.0" }, + { "PublicKeyToken", "31bf3856ad364e35" } + }), + new TaskItem("Microsoft.DiaSymReader.dll", new Dictionary() + { + { "CertificateName", "Microsoft101240624" }, + { "TargetFramework", ".NETStandard,Version=v1.1" }, + { "PublicKeyToken", "31bf3856ad364e35" } }) }; @@ -476,6 +489,20 @@ public void RoundTripFromTaskItemsToFileToXml() item.PublicKeyToken.Should().Be("abcdabcdabcdabcd"); }); modelFromFile.SigningInformation.FileSignInfo.Should().SatisfyRespectively( + item => + { + item.Include.Should().Be("Microsoft.DiaSymReader.dll"); + item.CertificateName.Should().Be("Microsoft101240624"); + item.TargetFramework.Should().Be(".NETStandard,Version=v1.1"); + item.PublicKeyToken.Should().Be("31bf3856ad364e35"); + }, + item => + { + item.Include.Should().Be("Microsoft.DiaSymReader.dll"); + item.CertificateName.Should().Be("MicrosoftWin8WinBlue"); + item.TargetFramework.Should().Be(".NETFramework,Version=v2.0"); + item.PublicKeyToken.Should().Be("31bf3856ad364e35"); + }, item => { item.Include.Should().Be("test-package-a.1.0.0.nupkg"); diff --git a/src/Microsoft.DotNet.Build.Tasks.Feed/src/SigningInformationModelFactory.cs b/src/Microsoft.DotNet.Build.Tasks.Feed/src/SigningInformationModelFactory.cs index cc6ad80fed1..b2b259f0e2b 100644 --- a/src/Microsoft.DotNet.Build.Tasks.Feed/src/SigningInformationModelFactory.cs +++ b/src/Microsoft.DotNet.Build.Tasks.Feed/src/SigningInformationModelFactory.cs @@ -73,7 +73,19 @@ public SigningInformationModel CreateSigningInformationModelFromItems( foreach (var signInfo in fileSignInfo) { var attributes = signInfo.CloneCustomMetadata() as IDictionary; - parsedFileSignInfo.Add(new FileSignInfoModel { Include = Path.GetFileName(signInfo.ItemSpec), CertificateName = attributes["CertificateName"] }); + var fileSignInfoModel = new FileSignInfoModel { Include = Path.GetFileName(signInfo.ItemSpec), CertificateName = attributes["CertificateName"] }; + + if (attributes.TryGetValue("PublicKeyToken", out string publicKeyTokenValue)) + { + fileSignInfoModel.PublicKeyToken = publicKeyTokenValue; + } + + if (attributes.TryGetValue("TargetFramework", out string targetFrameworkValue)) + { + fileSignInfoModel.TargetFramework = targetFrameworkValue; + } + + parsedFileSignInfo.Add(fileSignInfoModel); } } if (fileExtensionSignInfo != null) diff --git a/src/Microsoft.DotNet.VersionTools/tests/BuildManifest/ManifestModelTests.cs b/src/Microsoft.DotNet.VersionTools/tests/BuildManifest/ManifestModelTests.cs index f76322b0f21..999efc123b8 100644 --- a/src/Microsoft.DotNet.VersionTools/tests/BuildManifest/ManifestModelTests.cs +++ b/src/Microsoft.DotNet.VersionTools/tests/BuildManifest/ManifestModelTests.cs @@ -168,6 +168,36 @@ public void ManifestModelToXmlValidatesFileSignInfos(Type exceptionType, params VerifyToXml(exceptionType, signInfo); } + /// + /// Per issue: dotnet/arcade#7064 + /// + [Fact] + public void ValidateSymreaderFileSignInfos() + { + List models = new List(); + models.Add(new FileSignInfoModel() + { + Include = "Microsoft.DiaSymReader.dll", + CertificateName = "MicrosoftWin8WinBlue", + TargetFramework = ".NETFramework,Version=v2.0", + PublicKeyToken = "31bf3856ad364e35", + }); + models.Add(new FileSignInfoModel() + { + Include = "Microsoft.DiaSymReader.dll", + CertificateName = "Microsoft101240624", + TargetFramework = ".NETStandard,Version=v1.1", + PublicKeyToken = "31bf3856ad364e35", + }); + + SigningInformationModel signInfo = new SigningInformationModel() + { + FileSignInfo = models + }; + + signInfo.ToXml().Should().NotBeNull(); + } + /// /// Given a set of explicit file sign infos that or are invalid, /// Parse should throw with an appropriate error message if they are invalid.