Building Windows Presentation Form for multiple versions of .net - wpf

I am building a windows presentation form application. The issue I have is that my co-workers have different versions of .net installed on the desktops. If I build it on my machine which has .net version which is 4.6. When another person has a lower version of .net it fails. I can build the application multiple time with different version of .net but I would like to avoid that. So is there a way in Visual Studio to build a WPF that will work on multiple platforms and versions of .net?

You can change your target framework in the project properties (right click the project and select Properties):
Because higher .NET versions are backwards compatible with earlier versions, you can target a lower version that what is on your machine, though it means that you lose out on the newer apis.
So, for example, if you and your colleagues decide that .NET 4.0 is a good target, then having .NET 4.5 or .NET 4.0 will work for building and running the application.
For more information on Framework Targets, see:
What does it really mean to target a framework, and how do I maximize compatibility?
What is the effect of setting a “Target framework” in Visual Studio

Related

How to distribute .Net Core 3.1 with a WPF application

I am currently shipping a WPF application that targets .NET Framework 4.7.1. Almost all Windows systems nowadays have .NET Framework 4.7.1 (or greater) already installed. For the few users that don't, my app's installer provides a link to the Microsoft's download page. All security updates are handled by Windows update.
Now, I'd like to start targeting .NET Core 3.1. Many users do not have it on their machines. How can I get my app to run on wide range of machines, without burdening the users? One solution I thought of is to have my installer download .NET Core installer from Microsoft and run it. Am I going to mess anything up on the user's system if I do this? Is it going to be updated automatically by Microsoft updates?

Selecting correct .Net Framework for basic WPF - NUGET package can't install

I have created my first WPF project and it is written in .NET framework 4.7.2
I have NO idea about the importance and functionality of this however I want to be able to install it in a few businesses with as little chance of them needing to install a new framework. Perhaps that isn't important and I should just include it in the installer, but that is what I am not sure of.
I tried rolling back to 4.5 .NET however now one of my packages will not install on that framework.
Install-Package : Could not install package 'FluentEmail.Mailgun 2.8.0'. You are trying to install this package into a project that targets '.NETFramework,Version=v4.6', 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.
If I do any framework lower than 4.7.2 I can't see to run this, however I can't find documentation referring to this needing a specific framework to run.
Any pointers in the right direction would be helpful,
eg. Is the framework important for a basic WPF app not using any crazy tech, just a few API's and mainly data storage?
Can I force this package to install on an earlier based framework or is that going to fail?
The FluentEmail.Mailgun package targets .NET Standard 2.0 which you can see by expanding the Dependencies section at NuGet.org.
.NET Standard 2.0 is implemented by .NET Framework 4.6.1 and later which you read from the compatibility matrix in the docs.
This basically means that you need to target at least 4.6.1 to be able to consume the package in your app.
There is a caveat though:
While NuGet considers .NET Framework 4.6.1 as supporting .NET Standard 1.5 through 2.0, there are several issues with consuming .NET Standard libraries that were built for those versions from .NET Framework 4.6.1 projects. For .NET Framework projects that need to use such libraries, we recommend that you upgrade the project to target .NET Framework 4.7.2 or higher.
So if you are developing a new app, you are recommended to either target .NET Framework 4.7.2 or later or even better .NET Core 3.1 or .NET 5.
If you want the full story of which versions that are officially supported on which operating systems, you should refer to the lifecycle FAQ in the docs.
Targeting 4.5 doesn't make much sense since the support for it ended back in January 2016.

Adding multiple versions of WinForms control in Visual Studio Toolbox

I have multiple DLLs of a WinForms control targeted for different versions of .NET Framework and need to add them all in a Visual Studio Toolbox while showing only the one which is most suitable for currently selected version of .NET.
The control have different features when compiled against different versions of .NET, this is why it would be best to show the most "native" version only. For example, the control have some features removed in .NET 4.0 Client Profile or makes use of .NET 3.0 features when available (not avaiable in .NET 2.0).
The problem is that the control have same name and is signed with same Strong Name Key (SNK).
I can modify source code, but what to do to enable all versions of the component to reside in VS Toolbox?

WPF one executable file from project

I have a WPF project with one external library. Is it possible to make one executable file "*.exe" from this project to run on windows systems even without .net? and how to insert that library into .exe file?
You will need to have the .net framework installed on the clients pc. What this says is that since .Net has been preinstalled on Windows since XP SP1, you should target your application to the runtime that is available on the system you wish to install it on. And since you are targeting WPF you will need to make sure that you have available .net 3.5 or greater. You may want to look into the Client installation of the framework since it is smaller. And you may want to look at this Stackoverflow question
i.e. from above link
Windows .Net Framework
Win 7 SP1 4
win 7 3.5.1 ( can be updated to .Net Framework 4 through windows updates )
windows vista 3.0 ( can be updated to .Net Framework 4 through windows updates )
windows XP Sp 1 2.0
You must have .net installed to use a wpf application. You can use clickonce to make the install experience more friendly to the user, if he doesn't the right version of the .net framework installed.
As for the external third party library, see my answer here for the same issue.

What package of .Net framework is required on target client machine in order to run .Net winforms application?

I'm Trying to deploy my winforms project using installshield in order to make is available to be installed on other computers. My project is written under .net framework 3.5.
My question is : What version of .net package should be installed on the target machine in order to be able to run my project?
One thing to notice is that target machine is not connected to internet so I have to embed a standalone offline installer for .net framework.
Surely, with .Net framework 3.5 full redistributable package installed, my project runs fine. But it's ~200MB. Should I really install 200MB in order to run my ~10MB project on target machine?
one other option would be installing client redistributable package which I heard ~30MB. But I couldn't find any official release and am not sure if that's gonna work.
Any help would be appreciated.
You should deploy with the web installer so that it can determine what your client needs and download only those components. The full install is that big because it contains all variants of the framework for all possible systems (x86, x64, etc.).
This site from Scott Hanselman is an excellent resource on the matter of deploying .NET.
http://www.hanselman.com/smallestdotnet/
As it states on that site:
If you look for .NET Downloads on
Microsoft's site, it might look like
the .NET Framework is 200+ megs. It's
not. Those big downloads are the
Complete Offline Versions of every
version of the .NET Framework for
every kind of machine possible. The
big .NET download includes x86, x64,
and ia64. It includes .NET 2.0, 3.0,
and 3.5 code for all systems all in
one super-archive.

Resources