2017-10-02 3 views
1

J'ai créé un projet de formulaire Windows et ciblé 4.5 .NETLe message d'erreur qui invite l'utilisateur à installer la version dotnet correcte est incorrect

enter image description here

Quand je lance le fichier exe sur une machine qui ne fonctionne pas NET 4.0 ont installé, je reçois le message d'erreur suivant:

enter image description here

Lors de l'installation .Net 4.0 et exécutez le nouveau exe je reçois le message d'erreur suivant:

enter image description here

Pourquoi le premier message ne déclare pas que la version .NET requise est de 4,5 ??

+0

A partir du site Web de téléchargement: Cette version de .NET Framework fonctionne côte à côte avec .NET Framework 3.5 et versions antérieures, mais effectue une mise à jour sur place pour .NET Framework 4. – DonBoitnott

+0

Comment déployez-vous application? en utilisant le projet d'installation (projet de configuration de studio visuel) OU installshield OU quoi d'autre? il semble que vous avez sélectionné 4.0 dans la configuration requise et que votre application est construite sur 4.5? – Munawar

+0

@Munawar Je ne déploie pas mon projet. Le fichier exe s'exécute directement sur la machine. – Ala

Répondre

1

Selon this article, la version du .NET Framework qu'une application fonctionne sur est déterminé dans l'ordre suivant:

  1. fichier de configuration (.config)
  2. version Compilé
  3. Dernière version installée

Par défaut, si vous définissez l'infrastructure cible dans Visual Studio, vous avez un fichier .config à vous déployer à côté de votre .exe. Dans ce fichier .config Visual Studio crée un élément <supportedRuntime> qui a deux attributs: version et sku

L'élément par défaut pour 4.5 .NET ressemble à ceci:

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 

version est la version du CLR pris en charge - mais ce n'est pas nécessairement la même chose que la version du .NET Framework car tous les .NET Frameworks de 4.0 à 4.7 utilisent le CLR 4.0.
Seule sku (unité de gestion des stocks) spécifie la version exacte du .NET Framework pris en charge par votre application.

Selon this article, l'attribut sku (contenant un numéro de version) est uniquement reconnu à partir du .NET Framework 4.0.

Comme une note de côté: .NET 3.5 a utilisé le sku ainsi, mais seulement pour indiquer que vous soutenez la .NET Framework Client Profile (sku="client") qui n'existe plus depuis .NET 4.5.

La conclusion est:
Vous obtenez le premier message d'erreur, car le chargeur CLR 2.0 dans le .NET Framework 3.5 ne sait rien sur l'attribut sku. Il sait seulement que vous demandez un .NET 4.0 CLR. (Si vous ne disposez pas d'un fichier .config la version requise du CLR est compilé into the manifest de votre .exe, qui dans votre cas est v4.0.30319.)

seulement après avoir installé le .NET Framework 4.0 le CLR 4.0 loader lit maintenant l'attribut sku et sait par conséquent que vous devez également installer .NET Framework 4.5. C'est pourquoi vous obtenez ces deux messages d'erreur.

+0

Donc, il n'y a pas de solution ou de travail pour cela? – Ala

+0

@Ala Il existe [quelques solutions de contournement] (https://docs.microsoft.com/en-us/dotnet/framework/deployment/initialization-errors-managing-the-user-experience) dans une certaine mesure. Mais finalement, il serait beaucoup plus facile d'avoir une sorte de Bootstrapper d'installation qui [vérifie] (https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which -versions-are-installed) et installe le .NET Framework requis. Il y en a plusieurs disponibles, ou vous pouvez créer votre propre petit installateur, par exemple. en C++. – haindl

+0

@Ala Fondamentalement, ce sont principalement des programmes qui sont écrits sans utiliser .NET ou en utilisant une version de .NET dont l'installation est garantie sur le client. Mais sachez que sur les systèmes d'exploitation plus récents comme Windows 10 (ou Windows Server), vous pouvez installer certaines versions de .NET uniquement en tant que composant système ou en tant que [mise à jour du système d'exploitation] (https://docs.microsoft.com/fr-fr/ dotnet/framework/install/on-windows-10) et non via un redistribuable. – haindl