-
Notifications
You must be signed in to change notification settings - Fork 4.9k
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
Grpc.Net.Common .NETStandard is missing "Grpc.Net.Compression.DeflateCompressionProvider" #75086
Comments
I couldn't figure out the best area label to add to this issue. If you have write-permissions please help me learn by adding exactly one area label. |
@JamesNK can you help route? |
It sounds like a NuGet problem. This bit seems suspicious:
|
@JamesNK it seems DeflateCompressionProvider is 6.0 and later: Does it compile successfully against .NET Standard 2.0? |
BTW, I guess this issue should be reopened in https://github.com/grpc/grpc-dotnet ? |
Yes. Grpc.Net.Common and Grpc.Net.Client have multiple targets. The .NET Standard 2.0 target doesn't have There is no reason to open a bug in grpc-dotnet because this isn't a bug in grpc-dotnet. Something is wrong with how NuGet is restoring assemblies. And a custom copy of NuGet is being used which seems like a red flag. |
If we use native nuget from Debian image, we get errors even on install just one package. Example
|
Tagging subscribers to this area: @dotnet/area-meta Issue DetailsDescriptionI'm using a host application which targets .NET 6.0 with GRPC service developed under windows which references "Grpc.Net.Common". under windows all works great but when the solution is built and packages restore under a debian machine (docker), it restores this library as .NETStandard v2.0 which is not the same one which is restored on my machine (mine is .NETCoreApp v6.0).
when i opened the Grpc.Net.Common under dotPeek from the docker (.NETStandard v2.0) i can see that Grpc.Net.Compression.DeflateCompressionProvider doesn't exist there. it DOES exist on the .NETCoreApp v6.0 version which was restored on my windows machine. in this image, the package that is being restored is the .NETStandard one - i'm not sure why On the debian env we ARE using .NET 6 - the same solution is being restored & compiled there
the "nuget" package we are using was installed from Mono repository because the native nuget from debian 11 was causing us issues. Reproduction StepsIn this image Expected behaviorRestore .NET 6 version of Grpc.Net.Common. Actual behaviorRestore .NETStandard v2.0 version of Grpc.Net.Common. Regression?No response Known WorkaroundsNo response ConfigurationNo response Other informationNo response
|
UPD: We found alternative that solves our project restore issue. If we restore it with dotnet restore command, it works.
So, the problem is definitely somewhere in NuGet. |
Hi, Problem still persists. We still get exactly the same issue we got with nuget command: We use this command: as a workaround we overrite |
UPD Now we have another issue for another project with Microsoft.Extensions.DependencyModel. Summary: Docker image: Command to restore project: Issues:
While issues are not fixed, workaround is to restore project locally and replace/add dll file from local machine. |
This issue has been marked |
Do you happen to be using Packages.config or raw binary references? My best guess here is that your application project doesn't have a package reference to these assemblies, which often happens when the build is unable to calculate the project/package graph. This can happen when a project has a binary reference, or a project reference to a project using packages.config (which behaves like a binary reference). These are just guesses, of course, but they might help you spot the problem. What would be best to help you would be to share a repro of your issue and we can examine that. If you can't share a repro, a binary log might be enough. |
Thanks @ericstj Your hint led us to check some things. We start investigating the issue with Microsoft.Extensions.DependencyModel.dll
As a result, this 2 files has the same SHA We found an issue like ours, here -> dotnet/sdk#3886 We tried one suggested way to fix this by specifying csproj file during publish command and IT WORKS In CSPROJ file case we have sme SHA for this files
Seems like when you specify solution file on publish, it can't understand which project is the main one and kinda takes probably the latest project packages versions. I'll try same solution on other project and will update. But for now, as summary SOLUTION: On publish specify csproj file, not sln. |
I'm glad you were able to solve it! Publishing a SLN specifying an output directory is a pitfall that should be prevented. This issue is tracking preventing that: dotnet/sdk#15607 |
The specific issue linked is related to providing |
Both this and the linked issue are about publishing providing an output path. I clarified the comment above. I don't think there should be a problem publishing a sln without an output path. The problem when specifying an output path is that gets used as a global property to every project in the SLN and their outputs will clash with each other, overwriting files at random. If you are facing any problem, please open a new issue to report. Thanks! |
Description
I'm using a host application which targets .NET 6.0 with GRPC service developed under windows which references "Grpc.Net.Common". under windows all works great but when the solution is built and packages restore under a debian machine (docker), it restores this library as .NETStandard v2.0 which is not the same one which is restored on my machine (mine is .NETCoreApp v6.0).
when i started the service under debian i got the following exception:
---> System.TypeLoadException: Could not load type 'Grpc.Net.Compression.DeflateCompressionProvider' from assembly 'Grpc.Net.Common, Version=2.0.0.0, Culture=neutral, PublicKeyToken=d754f35622e28bad'.
when i opened the Grpc.Net.Common under dotPeek from the docker (.NETStandard v2.0) i can see that Grpc.Net.Compression.DeflateCompressionProvider doesn't exist there. it DOES exist on the .NETCoreApp v6.0 version which was restored on my windows machine.
why is this class missing in the .NETStandard v2.0 version?
in this image, the package that is being restored is the .NETStandard one - i'm not sure why
https://pasteboard.co/PaeZqwwMYcc5.jpg
On the debian env we ARE using .NET 6 - the same solution is being restored & compiled there
We restore our project based on mcr.microsoft.com/dotnet/sdk:6.0-bullseye-slim docker container, with this command:
RUN nuget restore ./PATH_TO_SOLUTION_FILE
the "nuget" package we are using was installed from Mono repository because the native nuget from debian 11 was causing us issues.
Reproduction Steps
In this image
mcr.microsoft.com/dotnet/sdk:6.0-bullseye-slim
install cross-platform NuGet from Mono-Project repository and try to restore a project that uses package<PackageReference Include="Grpc.Net.Common" Version="2.41.0" />
Expected behavior
Restore .NET 6 version of Grpc.Net.Common.
Actual behavior
Restore .NETStandard v2.0 version of Grpc.Net.Common.
Regression?
No response
Known Workarounds
No response
Configuration
No response
Other information
No response
The text was updated successfully, but these errors were encountered: