diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.PackTool.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.PackTool.targets
index 0ac75dd8f8ae..8fdd129a44c6 100644
--- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.PackTool.targets
+++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.PackTool.targets
@@ -54,8 +54,8 @@ NOTE: This file is imported from the following contexts, so be aware when writin
<_ToolRidsAreOnlyShims Condition="'$(RuntimeIdentifiers)' == '' and $(PackAsToolShimRuntimeIdentifiers) != '' ">true
<_UserSpecifiedToolPackageRids Condition="'$(ToolPackageRuntimeIdentifiers)' != ''">$(ToolPackageRuntimeIdentifiers)
<_UserSpecifiedToolPackageRids Condition="'$(_UserSpecifiedToolPackageRids)' == ''">$(RuntimeIdentifiers)
- <_HasRIDSpecificTools Condition=" '$(_UserSpecifiedToolPackageRids)' != '' ">true
- <_HasRIDSpecificTools Condition="'$(_HasRIDSpecificTools)' == ''">false
+ true
+ false
$(_UserSpecifiedToolPackageRids);$(PackAsToolShimRuntimeIdentifiers)
@@ -65,7 +65,7 @@ NOTE: This file is imported from the following contexts, so be aware when writin
<_InnerToolsPublishAot>false
- <_InnerToolsPublishAot Condition="$(_HasRIDSpecificTools) and '$(PublishAot)' == 'true'">true
+ <_InnerToolsPublishAot Condition="$(CreateRidSpecificToolPackages) and '$(PublishAot)' == 'true'">true
-
+
$(PackageId).$(RuntimeIdentifier)
@@ -390,7 +390,7 @@ NOTE: This file is imported from the following contexts, so be aware when writin
- <_ToolPackageType Condition="'$(RuntimeIdentifier)' != '' And '$(_HasRIDSpecificTools)' != ''">DotnetToolRidPackage
+ <_ToolPackageType Condition="'$(RuntimeIdentifier)' != '' And $(CreateRidSpecificToolPackages)">DotnetToolRidPackage
<_ToolPackageType Condition="'$(_ToolPackageType)' == ''">DotnetTool
@@ -427,7 +427,7 @@ NOTE: This file is imported from the following contexts, so be aware when writin
We can't call this for AOT'd tools because we can't AOT cross-architecture and cross-platform in .NET today. -->
<_PackageRids>$(ToolPackageRuntimeIdentifiers)
diff --git a/test/Microsoft.NET.ToolPack.Tests/GivenThatWeWantToPackAToolProject.cs b/test/Microsoft.NET.ToolPack.Tests/GivenThatWeWantToPackAToolProject.cs
index c9e05aa6a0d5..36fdf6037ab4 100644
--- a/test/Microsoft.NET.ToolPack.Tests/GivenThatWeWantToPackAToolProject.cs
+++ b/test/Microsoft.NET.ToolPack.Tests/GivenThatWeWantToPackAToolProject.cs
@@ -323,5 +323,42 @@ public void Given_targetplatform_set_It_should_error()
result.Should().Fail().And.HaveStdOutContaining("NETSDK1146");
}
+
+ [Fact]
+ public void It_packs_with_RuntimeIdentifier()
+ {
+ var testProject = new TestProject("ToolWithRuntimeIdentifier")
+ {
+ TargetFrameworks = ToolsetInfo.CurrentTargetFramework,
+ IsExe = true,
+ RuntimeIdentifier = EnvironmentInfo.GetCompatibleRid()
+ };
+ testProject.AdditionalProperties["PackAsTool"] = "true";
+ testProject.AdditionalProperties["ImplicitUsings"] = "enable";
+ testProject.AdditionalProperties["CreateRidSpecificToolPackages"] = "false";
+ testProject.AdditionalProperties["UseAppHost"] = "false";
+
+
+ var testAsset = _testAssetsManager.CreateTestProject(testProject);
+
+ var packCommand = new PackCommand(testAsset);
+
+ packCommand.Execute().Should().Pass();
+
+ packCommand.GetPackageDirectory().Should().HaveFile($"{testProject.Name}.1.0.0.nupkg");
+ packCommand.GetPackageDirectory().Should().NotHaveFile($"{testProject.Name}.{testProject.RuntimeIdentifier}.1.0.0.nupkg");
+
+ var nupkgPath = packCommand.GetNuGetPackage();
+
+ using (var nupkgReader = new PackageArchiveReader(nupkgPath))
+ {
+ var toolSettingsItem = nupkgReader.GetToolItems().SelectMany(g => g.Items).SingleOrDefault(i => i.Equals($"tools/{testProject.TargetFrameworks}/{testProject.RuntimeIdentifier}/DotnetToolSettings.xml"));
+ toolSettingsItem.Should().NotBeNull();
+
+ var toolSettingsXml = XDocument.Load(nupkgReader.GetStream(toolSettingsItem));
+ toolSettingsXml.Root.Attribute("Version").Value.Should().Be("1");
+ }
+
+ }
}
}