-
Notifications
You must be signed in to change notification settings - Fork 10.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update SDK #48908
Update SDK #48908
Conversation
@sbomer can you help with this? |
I filed an issue on SQLitePCLRaw at ericsink/SQLitePCL.raw#543, but in the meantime, I think we're going to need to set the |
@@ -31,7 +31,7 @@ public void Configure(IWebHostBuilder builder) | |||
}); | |||
|
|||
[UnconditionalSuppressMessageAttribute("Trimming", "IL2026", Justification = "Configuration object's public properties are preserved.")] | |||
static void ConfigureOptions<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties)] T>(IServiceCollection services, IConfigurationSection section) | |||
static void ConfigureOptions<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] T>(IServiceCollection services, IConfigurationSection section) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The upstream annotation (in Configure<TOptions>
) now specifies DynamicallyAccessedMemberTypes.All
, so we have to broaden the annotation here to match.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The weird thing is the underlying API hasn't change in the last 10 months.
Was there a linker or anlalyzer change?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good question
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@sbomer @agocke @vitek-karas - any thoughts on what could have fixed this between 8.0.100-preview.6.23305.3
and 8.0.100-preview.7.23321.23
? We must have had a bug here in the analyzer?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe the configuration binder source generator? I seem to see something like the Configure call below to be handled by the source generated at least in some cases. So it's possible that it's effectively started to call a different overload than before? Just guessing.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/home/vsts/work/1/s/src/Middleware/Spa/SpaProxy/src/SpaHostingStartup.cs(37,13): error IL2091: 'TOptions' generic argument does not satisfy 'DynamicallyAccessedMemberTypes.All' in 'Microsoft.Extensions.DependencyInjection.OptionsConfigurationServiceCollectionExtensions.Configure<TOptions>(IServiceCollection, IConfiguration)'. The generic parameter 'T' of 'ConfigureOptions<T>(IServiceCollection, IConfigurationSection)' does not have matching annotations. The source value must declare at least the same requirements as those declared on the target location it is assigned to. [/home/vsts/work/1/s/src/Middleware/Spa/SpaProxy/src/Microsoft.AspNetCore.SpaProxy.csproj] ##[error]src/Middleware/Spa/SpaProxy/src/SpaHostingStartup.cs(37,13): error IL2091: (NETCORE_ENGINEERING_TELEMETRY=Build) 'TOptions' generic argument does not satisfy 'DynamicallyAccessedMemberTypes.All' in 'Microsoft.Extensions.DependencyInjection.OptionsConfigurationServiceCollectionExtensions.Configure<TOptions>(IServiceCollection, IConfiguration)'. The generic parameter 'T' of 'ConfigureOptions<T>(IServiceCollection, IConfigurationSection)' does not have matching annotations. The source value must declare at least the same requirements as those declared on the target location it is assigned to.
The IL2091 error specifically references the call to Microsoft.Extensions.DependencyInjection.OptionsConfigurationServiceCollectionExtensions.Configure<TOptions>(IServiceCollection, IConfiguration)
, so I don't think the call is getting intercepted by the source generator.
@halter73 Thanks for tracking that down. I've added 47f5966 as suggested. |
Unfortunately this is still stuck on the new RID resolution warning because it also shows up in our template tests, and we don't have such an easy way to override the build config for those. I did try one possible workaround but it didn't work. Some other approach will be needed for setting |
<!-- Temporarily ignore RID-related warnings. --> | ||
<ItemGroup> | ||
<RuntimeHostConfigurationOption Include="System.Runtime.Loader.UseRidGraph" Value="true" /> | ||
</ItemGroup> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This will actually show up in people's real apps when they create them, won't it? Is that OK?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, it will. I gave this a try largely to see if this is the only remaining issue with this SDK update or if we might have to onion peel on another item.
As to whether or not it is OK, it appears that the right thing to do is resolve the underlying issue is resolve ericsink/SQLitePCL.raw#543.
Given that we've branched for preview7 already, I was assuming that it was OK to take this in as we have some runaway to land a fix in preview7.
@bricelam Thoughts on feasibility of getting a fix for the underlying issue?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks like we'll also need to fix templates in the spa-templates repo. :/
I'm fine to pursue this assuming we think we can land a permanent fix for preview7 or there isn't a way to address this that is more hidden from the user.
<!-- Ignore warning about RID resolution rules changing in .NET 8 Preview 6 --> | ||
<!-- Needed until https://github.com/ericsink/SQLitePCL.raw/issues/543 is fixed --> | ||
<!-- See https://github.com/dotnet/aspnetcore/pull/48908#issuecomment-1601894643 --> | ||
<ItemGroup> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How does this work for templates?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought it might work for the templates because of these lines:
<GenerateFileFromTemplate | |
TemplateFile="$(MSBuildThisFileDirectory)..\TestInfrastructure\Directory.Build.props.in" | |
Properties="RepoRoot=$(RepoRoot);ArtifactsBinDir=$(ArtifactsBinDir)" | |
OutputPath="$(TestTemplateCreationFolder)Directory.Build.props" /> |
<Import Project="${ArtifactsBinDir}GenerateFiles\Directory.Build.props" /> |
But I was just trying thing, and I'm a bit surprised it worked too. @wtgodbe Is there a better way to do this? I saw that @mitchdenny updated this a couple months ago as part of #48014. Do we still need to hardcode SuppressGenerateILCompilerExplicitPackageReferenceWarning?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, this is the right way to do it, at least for in-repo stuff. Template tests will get the workaround, but template projects may run into issues in real world scenarios (since the workaround won't be injected into them). I don't know enough about this specific issue to know if it's something that would actually manifest.
@eerhardt do we still need the SuppressGenerateILCompilerExplicitPackageReferenceWarning
workaround?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, this is the right way to do it, at least for in-repo stuff. Template tests will get the workaround, but template projects may run into issues in real world scenarios (since the workaround won't be injected into them). I don't know enough about this specific issue to know if it's something that would actually manifest.
Ah, that makes sense. Hopefully, this is resolved for preview7 and we don't have to issue a known issues warning. 🤞🏽
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@eerhardt do we still need the SuppressGenerateILCompilerExplicitPackageReferenceWarning workaround?
I believe so. I don't know of any changes here that would cause us to no longer need the workaround. We are running our tests against a specific version of the runtime, and not the runtime that comes with the SDK. See dotnet/runtime#84372.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah, that makes sense. Hopefully, this is resolved for preview7 and we don't have to issue a known issues warning. 🤞🏽
I doubt this will be fixed by preview7. Even if ericsink/SQLitePCL.raw#543 is resolved by then and uploaded to nuget, EF still needs to update its dependencies. Anyone using Microsoft.Data.Sqlite will likely see warnings until rc1 at the earliest unless they manually upgrade, so we should probably get ahead of the issues. @dotnet/efteam
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if it would be reasonable to add a mechanism to tell the SDK that it should not warn on some particular package or particular versions of packages - for example, the consumer has checked that they are not affected by the non-portable RID in that package, as would be the case here. @dsplaisted @vitek-karas @agocke - thoughts?
It would go kind of counter to making a hard push for packages to fix their RID usage, but it would provide an option between suppressing the warning entirely and switching to the old behaviour - neither of which we really want people to do.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there a way to suppress the warning by its warning code - I don't know if NoWarn
works on SDK warnings. If that works, then I'd probably not add any new support and ask the affected people to suppress the warning code instead.
Basically we want packages to fix this problem, and there are not that many packages which are affected by this and consequently not that many teams/customers will see the warning either. I'd like to avoid adding production code into the SDK unless there's a strong reason for it - and this doesn't feel that strong - assuming the warning can be suppressed already.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
<NoWarn>NETSDK1206</NoWarn>
works.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Basically we want packages to fix this problem, and there are not that many packages which are affected by this and consequently not that many teams/customers will see the warning either.
That's fair. The main concern is that the affected package is brought in as a dependency under certain template configurations to there is a chance that users might run into the issue with this particular package at a higher rate than other packages.
No description provided.