[release/6.0] Ensure UserSecretsIdAttribute is added to assembly (#63423)
authorEric Erhardt <eric.erhardt@microsoft.com>
Fri, 7 Jan 2022 18:45:06 +0000 (12:45 -0600)
committerGitHub <noreply@github.com>
Fri, 7 Jan 2022 18:45:06 +0000 (10:45 -0800)
* [release/6.0] Ensure UserSecretsIdAttribute is added to assembly

When Microsoft.Extensions.Configuration.UserSecrets is referenced transitively, for example through Extensions.Hosting, the UserSecretsIdAttribute isn't getting added to the built assembly. This is because the logic is contained in a `build` folder which is excluded by the dependency from Extensions.Hosting.

The fix is to move the logic to `buildTransitive`, so it gets picked up by NuGet.

Note, we also need to service the Extensions.Hosting package so it references the new UserSecrets version by default.

Fix #63246

* Add a binding redirect in order to fix test failure on netfx.

src/libraries/Microsoft.Extensions.Configuration.UserSecrets/src/Microsoft.Extensions.Configuration.UserSecrets.csproj
src/libraries/Microsoft.Extensions.Configuration.UserSecrets/src/buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.props [moved from src/libraries/Microsoft.Extensions.Configuration.UserSecrets/src/build/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.props with 100% similarity]
src/libraries/Microsoft.Extensions.Configuration.UserSecrets/src/buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.targets [moved from src/libraries/Microsoft.Extensions.Configuration.UserSecrets/src/build/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.targets with 100% similarity]
src/libraries/Microsoft.Extensions.Hosting/Directory.Build.props
src/libraries/Microsoft.Extensions.Hosting/src/Microsoft.Extensions.Hosting.csproj
src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj

index 3fda472..659217f 100644 (file)
@@ -16,8 +16,8 @@
   </ItemGroup>
 
   <ItemGroup>
-    <Content Include="build\netstandard2.0\$(MSBuildProjectName).props" PackagePath="%(Identity)" />
-    <Content Include="build\netstandard2.0\$(MSBuildProjectName).targets" PackagePath="%(Identity)" />
+    <Content Include="buildTransitive\netstandard2.0\$(MSBuildProjectName).props" PackagePath="%(Identity)" />
+    <Content Include="buildTransitive\netstandard2.0\$(MSBuildProjectName).targets" PackagePath="%(Identity)" />
   </ItemGroup>
 
 </Project>
index 43dc3a2..207017d 100644 (file)
@@ -2,5 +2,6 @@
   <Import Project="..\Directory.Build.props" />
   <PropertyGroup>
     <IncludePlatformAttributes>true</IncludePlatformAttributes>
+    <ServicingVersion>1</ServicingVersion>
   </PropertyGroup>
 </Project>
index b868be5..f80e951 100644 (file)
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
     <TargetFrameworks>$(NetCoreAppCurrent);netstandard2.0;netstandard2.1;net461</TargetFrameworks>
@@ -6,6 +6,8 @@
     <PackageDescription>Hosting and startup infrastructures for applications.</PackageDescription>
     <!-- Use targeting pack references instead of granular ones in the project file. -->
     <DisableImplicitAssemblyReferences>false</DisableImplicitAssemblyReferences>
+    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
+    <!-- ServicingVersion moved to ..\Directory.Build.props in order to share with test project. -->
   </PropertyGroup>
 
   <ItemGroup Condition="!$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net6.0'))">
index ee0c814..babb650 100644 (file)
     <ProjectReference Include="$(LibrariesProjectRoot)Microsoft.Extensions.Hosting\src\Microsoft.Extensions.Hosting.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <!-- Workaround for https://github.com/dotnet/runtime/issues/63467 -->
+    <SuggestedBindingRedirects Include="Microsoft.Extensions.Hosting, Culture=neutral, PublicKeyToken=adb9793829ddae60"
+                               MaxVersion="$(MajorVersion).$(MinorVersion).0.$(ServicingVersion)" />
+  </ItemGroup>
+
 </Project>