Microsoft.Net.Compilers package breaks when updated - c#

I was wondering what causes the Nuget package Microsoft.Net.Compilers to try to use .NET 4.6 after updating it to its latest version?
The server that my intranet site is being deployed to only has .NET 4.5 and when I update the Microsoft.Net.Compilers package and deploy the site I get an error that says its trying to reference .NET 4.6 even though in my project setting the version is set to .NET 4.5. Is there a fix for this problem or should I just not update?

The Rosyln compiler itself has a dependency on the .NET Framework. This build-time dependency is irrespective of the Framework version your code is targetting.
The Nuget page for Microsoft.Net.Compilers states (at version 2.8.0):
This package can be used to compile code targeting any platform, but
can only be run using the desktop .NET 4.6+ Full Framework.
If you cannot install a newer version of the Framework your best option is to use an earlier version of Microsoft.Net.Compilers. The newest version I can find which appears to support .NET 4.5 is 2.0.1.

Related

Why Netcoreapp3.1 not Compatible with net5.0 Class Library

As per my understanding, net5.0 is compatible with both netcoreapp and older .net versions.
I am trying to create an Azure function that targets netcoreapp3.1 and use a library that was built targetting net5.0. However, I am getting the following error, which indicates there is incompatibility issues.
Error NU1202 Package XXX is not compatible with netcoreapp3.1 (.NETCoreApp,Version=v3.1).
Package XXX supports: net5.0 (.NETCoreApp,Version=v5.0)
I have quoted the above from VS 2019 but replaced package name with XXX for privacy. The two strings in bracket are verbatim and I am not clear why net5.0 is being listed as .NETCoreApp, Version 5.0.
Could someone explain what is going on and if there is anything I have misunderstood?
As per my understanding, net5.0 is compatible with both netcoreapp and older .net versions.
Yes, but not the other way round. There are things in .NET 5.0 which aren't in .NET Core 3.1.
You can target a framework for an application and then use a library targeting an earlier framework, but not the other way round. So for example, it would be fine for your Azure function to target .NET 6.0 and use a library targeted at .NET 5.0.
Basically, to solve your problem you'll either need to use a different library (or an earlier version of the library which targeted .NET Core 3.1, or maybe .NET Standard) or update to a more recent runtime.

System.Data.SqlClient with .NET 4.0

How to install System.Data.SqlClient to a .NET 4.0 project? When trying to install nuget package is VS, getting error package does not contain any assembly references or content files that are compatible with that framework. Can I go to a earlier version than 4.8.2?
As mentioned in the comments above, the .net 4 framework includes System.Data.SqlClient, you only need to add a reference to your project.
From this document, you can know that the minimum version of the .net framework that Microsoft.Data.SqlClient depends on is .NETFramework 4.6.1.
For changing the version when downloading the package, you can select other versions in the Version drop-down box.

.net 5 project requiring .net core 3.1 to be installed

I am attempting to upgrade a MonoGame project I am working on to .net 5. I have upgraded all of my nuget packages. Then I changed the target framework to .net 5. The project compiles fine and runs perfectly. However, when I try to run it through my github actions workflow with only installing the .net 5 tools, the compilation fails with the following message:
It was not possible to find any compatible framework version The
framework 'Microsoft.NETCore.App', version '3.1.0' was not found.
- The following frameworks were found:
5.0.0 at [/home/runner/.dotnet/shared/Microsoft.NETCore.App] You can resolve the problem by installing the specified framework
and/or SDK.
If I try to install .net core 3.1 tools also, it will compile.
The project I'm using is here, this is the particular pull request that is failing. (If you are reading this later the commit I am referring to is a876e47)
I have also tried a pre-release version of Serilog.Sinks.Console thinking that was the issue. That did not work. I don't understand what is requiring the Microsoft.NETCore.App 3.1.0 since under Dependencies I can only see version 5.0.0 being required.
As Exploding Kitten pointed out in a comment
probably, it's caused by internal monogames' tools, they require 3.1: https://github.com/MonoGame/MonoGame/issues/7400#issuecomment-725422676
which explains the need for .NET Core 3.1.

Do .NET Core SDK / Runtime and NuGet Package Versions have to match?

I currently have a ASP.NET Core Application running on ASP.NET Core 3.1.2.
While looking for package updates, i realized, that a lot of Microsoft packages (e.g. Microsoft.Extensions.Caching.Memory, Microsoft.Extensions.Configuration.Abstractions, ...) have been updated from 3.1.2 (the latest version available when i built the application) to 3.1.5. Also the latest .NET Core SDK and Runtime has been updated to 3.1.5.
Is this a coincidence or is there any connection between .NET Core SDK / Runtime and NuGet package versions?
Also can i update my NuGet packages to 3.1.5 without updating the .NET Core Runtime on my server?
Thanks,
Jens
Generally they don't have to match, unless some reflection that requires some exact version of some assembly (which happens to ASP.NET Core very often).
Due to the semantic versioning of .NET Core platform and packages, updates in the third version must bring no API changes, so they will always build without failure and regular calls to these packages would work properly.

Problem adding the Square.Connect nuget package

I have been trying to add the Square.Connect nuget package so that I can integrate with the square up payment system.
When I am trying to add the package I am getting an error:
"Could not install package 'Square.Connect 2.14.0'. You are trying to install this package into a project that targets '.NETFramework,Version=v4.5', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author."
I have tried on a new application using .net 3.5 and .net 2.0 but I get the same error but with the changed target version.
Has anyone been able to get around this or can you advise me what I maybe doing wrong?
According to nuget.org https://www.nuget.org/packages/Square.Connect/ the Square.Connect package is for .NETStandard 2.0. So you should target that. Hint: Expand dependencies on the nuget page, to see what it requires.
This package is incompatible with your project.
You should target .NET Standard 2.0 or .NET Full Framework 4.6.1 or higher.
Both can work with .NET Standard 2.0 assemblies.
.NET Core 2.0 too, but that's not usefull for you, I guess!
As Palle Due's answer says, the package information page for the most recent version of the package lists .NET Standard 2.0 as a dependency. Therefore, your project must target something compatible with .NET Standard 2.0. This table lists several compatible runtimes, such as .NET Framework 2.6.1 or higher, .NET Core 2.0 or higher, as Schwarzie2478's answer listed (but he didn't give source information, which I think is useful). The table also lists minimum versions for some other runtimes like Xamarin's Android/iOS, or Unity game engine.
However, if you look at some older versions of the package, 2.10.1.297 and earlier depend on .NET Framework 4.5. Therefore, if for some reason you can't target a newer version of the .NET Framework, you could use these older versions of the package. Although I don't know any reason why anyone would be stuck on such an old version of the Framework. .NET Framework lifecycle is complex and very difficult to find a table with actual dates, but my guess is that no supported server operating system is limited to .NET Framework 4.5, so any server installing security updates will probably be on .NET Framework 4.6.x or more likely 4.7.x, so I really don't see any good reason to stay on net45.

Categories