.NET Core Runtime backward compatibility - c#

I need to install on a Windows Server 2012 the .NET Core Runtime for a webapp written with version 1.1. Can I install the .NET Core Runtime 2.0?
I didn't find a clear answer at my question.
Here someone raised a similar question
https://github.com/dotnet/docs/issues/4241
and here the official .NET Core guidance about runtime versioning
https://learn.microsoft.com/en-us/dotnet/core/versions/

According to the documentation, .NET Core versions can be installed side by side:
While there is a single host, most of the other components are in versioned directories (2,3,5,6). These means multiple versions can be present on the system since they are installed side-by-side.

Related

Multiple versions of .NET on the same server

So I've always known it's okay to run multiple versions of the .NET framework on a single computer (client or server alike). This question, though a bit old, talks about this.
A while back, however, I was tasked with creating a new ASP.NET application, and I was trying to decide whether to use the full .NET framework or .NET Core, and I came across this article from Microsoft. The article states that if I need side-by-side installations of the framework, I should use .NET Core. Here's the full quote:
To install applications with dependencies on different versions of
.NET, we recommend .NET Core. .NET Core offers side-by-side
installation of different versions of the .NET Core runtime on the
same machine. This side-by-side installation allows multiple services
on the same server, each of them on its own version of .NET Core.
But I thought side-by-side installations of the Framework were already possible without .NET Core? What am I missing?
The reason I ask is that I currently have an old ASP.NET application that uses the .NET Framework 2.0, and I am now working on one that uses .NET Core. I ran into some issues that got me considering switching the .NET Core app to the full .NET Framework 4.6, but that Microsoft article got me a bit confused.
The question is: will I be able to run both apps (.NET framework 2.0 and 4.6) on the same Windows 2008 R2 server without issues? If so, then what is that article referring to?
One last thing: both my apps (old and new) use Crystal Reports. There's a possibility that the new app might need a newer version of Crystal Reports than the old app. Will I be able to run different versions of Crystal Reports like this on the same server? Is this the situation in which I would require .NET Core like the Microsoft article says?
Thank you
Side-by-side installations of the framework are not only possible, they are a fact. NET 1.0, 2.0 and everything past 4.0 all have separate installations. However:
.NET 3.0 and 3.5 both use the 2.0 runtime and are therefore not truly separate.
Similarly, .NET 4.5 and all versions above all use the 4.0 runtime and are therefore not separate from each other. To further complicate things, when you install a later version, the base 4.0 runtime is actually upgraded.
Last but not least, which framework version gets picked to run your application has changed with .NET 4.0. The rules for this are rather complicated and depend on both the versions installed and the application configuration; see this article for a full discussion.
To your question, then:
Will I be able to run both apps (.NET framework 2.0 and 4.6) on the
same Windows 2008 R2 server without issues?
If .NET Framework 2.0 and 4.6 are both installed, then yes. Assuming no special configuration settings, the 2.0 application will run on the 2.0 framework, but it can also be configured to use the 4.6 framework (which will present itself as the 4.0 runtime).
If so, then what is that article referring to?
The article is referring to the fact that the full .NET Framework has gradually abandoned the idea of perfectly separate side-by-side installations by having no separations between minor version (and sometimes even major versions), while .NET Core has doubled down on the idea by allowing self-contained deployment. That is to say, not only can a .NET Core 1.0 and a .NET Core 2.0 application coexist without any risk of sharing dependencies the way a .NET Framework 2.0 and 3.5 application would, even two .NET Core 1.0 applications can exist together without sharing dependencies, something which is not possible for full .NET Framework applications. If (say) a patch is installed for .NET 2.0, it will affect all .NET 2.0, 3.0 and 3.5 applications, at least on the binary level. You cannot choose to have some applications affected by the patch and not others (although configuration switches are usually added for behavior that breaks compatibility).
One last thing: both my apps (old and new) use Crystal Reports.
There's a possibility that the new app might need a newer version of
Crystal Reports than the old app. Will I be able to run different
versions of Crystal Reports like this on the same server? Is this the
situation in which I would require .NET Core like the Microsoft
article says?
This is independent of the framework and depends on how Crystal Reports itself handles versioning. According to the manufacturer, the answer is yes, for major releases but not minor updates:
Side-by-side installation of different major release version of
Crystal Reports designer is supported since Crystal Reports 9,
because each major release version installs the software in different
directory.
You do not require .NET Core to make side-by-side installation of different assembly versions possible. What's more, even if you used a self-contained deployment of your .NET Core application, it would likely still refer to the shared installation of Crystal Reports on the machine, not to a self-contained deployment of Crystal Reports (I don't think such a thing exists; I'm not even sure Crystal Reports is currently supported on .NET Core).
Last but not least: note that some versions of .NET are no longer officially supported. The policies on what versions are supported (and where) are fairy complex, depending as they do on whether the Framework was part of the OS or not, but detailed here. .NET 4.6 has some very nasty JIT compiler bugs (fixed in 4.6.1), so you really don't want to be using it anyway, official support or no. If your server does not yet have any version of .NET past 2.0 installed, you may as well jump directly to the latest supported version for your OS (as of writing, 4.8).

Using .NET Standard 2.0 with Mono

Does anyone know if .NET Standard 2.0.0 is supported on Mono? I currently have a build that is working fine on windows 10. When I attempt to use in Mono in a Ubuntu Linux environment I get the following error:
Could not locate the assembly 'netstandard'. Check to make sure the assembly exists on disk.
Dotnet core 2 is added with no problems via the SDK, but I seem to not have any references to .NET Standard 2. I had a similar problem on windows 10 originally, which was resolved after I updated my version of visual studio.
Consult the release notes for details, but Mono 5.4.0 includes NuGet 4.3.0 and MSBuild 15.4.
Mono 4.8.0 Preliminary support
API additions for .NET Standard 2.0
We added APIs to comply with .NET Standard 2.0, which is still a work in progress at the time of this writing. Note that in some cases an implementation is still missing and will throw at runtime.
Mono 5.2.0 Runtime support (compiling is in "Preview Status")
.NET Standard 2.0 groundwork
We’ve done all the groundwork to support libraries that conform to .NET Standard 2.0. Loading and running a library compiled against the 2.0 standard should work fine, tooling support (i.e. creating a .NET Standard 2.0 library) is still in preview though.
.NET Core 2.0 SDK Installation needed
You’ll need to install the .NET Core 2.0 SDK for tooling support as we use the MSBuild tasks which are installed as part of the .NET Core 2.0 SDK, similar to how Visual Studio/MSBuild on Windows does it.

Log2Console tells me I need .NET framework 2.0 when I have 4.5 Installed

I'm trying to install Log2Console, but apparently I require .NET Framework 2.0 even though I already have 4.5 present. Could there be dependencies that 2.0 offers that 4.5 doesn't?
The official documentation wasn't very helpful.
I understand this is very application-specific, but I'm trying to understand the seemingly backward-incompatible nature of the .NET framework here if any.
Look just install the Framework of 3.5 full, restart and it'll be working because it includes the previous Dll's versions. with the old structure.

Windows Services / .net environment

We are planning to upgrade to windows server 2008 machine (from server 2003) and have a bunch of windows services written in visual studio 2003/2005 that we will have to migrate. My concerns is that on server 2008 there is no .NET 1.1 framework, as we had on the server 2003.
I have some doubts, but hopeful to clear them here:
Are windows services 'targeted' for specific .net environments?
If, yes, how can I migrate to framework to 2.0?
Can I use the installutil from .net 2.2 to install a .net 1.1 win service?
Are windows services 'targeted' for specific .net environments?
Not specifically. .NET assemblies are version specific, but usually backwards compatible. A .NET 1.1 assembly will still run on a 2.0 or higher .NET version. I do suggest to upgrade though since .NET 1.1 is more than ten years old already.
If, yes, how can I migrate to framework to 2.0?
You have to change the targeted .NET Framework for the Visual Studio project. You can do this in the Project Settings dialog. You have to recompile and distribute that newer version.
Can I use the installutil from .net 2.2 to install a .net 1.1 win service?
Yes. The installutil is not something .NET specific. It will work for any exe as far as I know.
You can install .NET 1.1 (and also a SP1) on Windows 2008. It warns you about conflicts but works ok.

.NET framework pre requisite

Hello friends i need an explanation regarding .NET framework pre-requisite while installing the published application in the target machine.
As java is downward compatible, by which i mean that if i have installed java v1.6 and if the application is developed using java v1.5 (i also mean that only classes and packages available in 1.5 are used to build the appln.)
I am sure that the application developed will definitely run by installing the latest or higher versions of jre or j2se.
Similarly in the case of .NET platform suppose if i develop my application using .NET framework 3.5 and in the target machine i have installed .NET framework 4.0 (the latest) even then it prompts to install the .NET framework 3.5 why is this so?
The real time example is i have downloaded and tried installing MySQL workbench and also installed .NET framework 4.0 But it still asks to install the .NET framework 3.5 before running the MySQL installation.
My question is does .NET framework is downward compatible as java or .NET?
Version Compatibility in the .NET Framework:
The .NET Framework 4 is
backward-compatible with applications
that were built with the .NET
Framework versions 1.1, 2.0, 3.0, and
3.5. In other words, applications and components built with previous
versions of the .NET Framework will
work on the .NET Framework 4.
However, in practice, this
compatibility can be broken by
seemingly inconsequential changes in
the .NET Framework and changes in
programming techniques. For example,
performance improvements in the .NET
Framework 4 can expose a race
condition that did not occur on
earlier versions. Similarly, using a
hard-coded path to .NET Framework
assemblies, performing an equality
comparison with a particular version
of the .NET Framework, and getting the
value of a private field by using
reflection are not backward-compatible
practices. In addition, each version
of the .NET Framework includes bug
fixes and security-related changes
that can affect the compatibility of
some applications and components.
If your application or component does
not work as expected on the .NET
Framework 4, use the following
checklists.
For .NET Framework 2.0, 3.0, and 3.5 applications:
Check .NET Framework 4 Migration
Issues for any changes that might
affect your application and apply the
workaround described.
If you are recompiling existing source
code to run on the .NET Framework 4,
or if you are developing a new version
of an application or component that
targets .NET Framework 4 from an
existing source code base, check
What's Obsolete in the .NET Framework
for obsolete types and members, and
apply the workaround described.
(Previously compiled code will
continue to run against types and
members that have been marked as
obsolete.)
If you determine that a change in the
.NET Framework 4 has broken your
application, check the Runtime
Settings Schema to determine whether
you can use a runtime setting in your
application configuration file to
restore the previous behavior.
If you encounter an issue that is not
documented, file a Microsoft Connect
bug and contact netfxcf#microsoft.com
with the bug number.
Yes, .Net 4 framework is backwards compatible with applications built on previous versions of .Net. You can see this link on MSDN for more info.
If you have .Net 3.5 or .Net 4 installed and a third party still requires either (or and older version) then the installer is not checking the correct prerequisite install conditions.

Categories