5
votes

Comment mettre à jour AspNetCore de 2.2.0 à 2.2.2

tldnr: Comment mettre à niveau Microsoft.AspNetCore.App de 2.2.0 vers 2.2.2 ? Il est désactivé dans l'interface utilisateur du gestionnaire de packages.


Lorsque j'ai créé un projet de test, j'ai réalisé que Microsoft.AspNetCore.App était la version 2.2.2 (dernière version) alors que dans mon projet Api principal, c'était 2.2.0.

 dépendances de projets et références SDK

Je n'ai pas pu le mettre à jour en raison de

Implicitement référencé par un SDK. Pour mettre à jour le package, mettez à jour le SDK auquel il appartient

 nuget manager bloquant la mise à jour du paquet vers la version 2.2.2

J'ai installé le SDK 2.2.104, qui devrait contenir 2.2.2 (j'aime la simplicité de Microsoft avec ses numéros de version)

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
  </ItemGroup>

</Project>

Quelle est la bonne façon de mettre à jour tout cela vers 2.2.2 ? Je pourrais définir le numéro de version du package dans le csproj et cela semble fonctionner très bien, mais je suppose que ce n'est pas la bonne façon de procéder. Pourquoi l'interface utilisateur la désactiverait-elle alors?

Le fichier de projet provient du modèle par défaut.

C:\Users\matthias>dotnet --list-sdks
2.1.202 [C:\Program Files\dotnet\sdk]
2.1.402 [C:\Program Files\dotnet\sdk]
2.1.403 [C:\Program Files\dotnet\sdk]
2.1.503 [C:\Program Files\dotnet\sdk]
2.1.504 [C:\Program Files\dotnet\sdk]
2.1.600-preview-009472 [C:\Program Files\dotnet\sdk]
2.2.104 [C:\Program Files\dotnet\sdk]

Source: https://github.com/matthiaslischka/netcore222updateissue

J'ai maintenant ajouté RuntimeFrameworkVersion 2.2.2 au csproj comme ESG suggéré et maintenant j'obtiens cette vue étrange:

 Le gestionnaire de Nuget affiche différentes versions pour le même package

J'ai inspecté les DLL compilées avec ILSpy et il semble toujours être 2.2.0.0 ilspy show version 2.2.0.0


3 commentaires

Consultez la documentation: version implicite , c'est assez bien documenté. Fondamentalement: lorsque vous omettez l'attribut Version de PackageReference , il utilisera toujours le dernier installé sur le BUILD SYSTEM (en supposant que vous ne spécifiez pas manuellement un version spécifique d'un package spécifique dans vos applications Web csproj). L'idée derrière est d'appliquer automatiquement des correctifs de sécurité sur une reconstruction (pour les applications autonomes ou une reprise sur les applications portables)


Alors? Pourquoi ne prend-il pas 2.2.2 alors? J'ai installé le SDK 2.2.104 qu'est-ce que 2.2.2 < / a>. J'ai ajouté le xml csproj et un lien vers la source. Mais ce n'est de toute façon que le modèle par défaut.


Avez-vous déjà résolu ce problème?


3 Réponses :


1
votes

Comme vous disposez du SDK 2.2.2 .Net core, vous forcez la version d'ASP.Net en spécifiant RuntimeFrameworkVersion dans votre csproj .

<PropertyGroup>
    <RuntimeFrameworkVersion>2.2.2</RuntimeFrameworkVersion>
</PropertyGroup>


5 commentaires

Je ne comprends pas. La version cible dans le projet est netcoreapp2.2 , pas de numéro de correctif: netcoreapp2.2 C'est la version cible la plus élevée selon ce document


@Matthias Mon mauvais, c'était pour les versions mineures, pas pour la version patch. Voir la mise à jour.


Ça ne change rien. J'ai testé avec un modèle par défaut ( source ), ne fonctionne pas.


J'ai bifurqué votre projet et appliqué le changement. Voir les captures d'écran dans la racine du repo: github.com/EricStG/netcore222updateissue


Voir ma mise à jour dans le message d'origine. Cela semble simplement modifier le numéro de version affiché par le gestionnaire de paquets nuget, mais pas le numéro de version réel. Cela me déroute encore plus ...



4
votes

J'ai posté ceci en réponse au bogue d'Andy sur GitHub, mais je l'ai re-posté ici pour une plus grande portée:

Si vous utilisez .NET Core, la seule chose que vous devez faire pour mettre à jour le correctif est d'installer le dernier moteur d'exécution corrigé sur la machine exécutant l'application (c'est-à-dire vos serveurs, boîtes de développement, etc.).

Les applications .NET Core automatiquement passent à la version de correctif la plus élevée associée à la paire majeure / mineure que vous ciblez. Ce comportement peut être désactivé à l'aide de un paramètre dans [appname] .runtimeconfig.json mais nous vous recommandons vivement de le conserver pour vous assurer de toujours fonctionner au maximum -à-date runtime (avec tous les correctifs de sécurité publiés).

Bien que nous vous recommandons d'exécuter le dernier correctif, nous vous recommandons de ne pas mettre à jour votre application pour cibler les versions ultérieures du correctif, car votre application ne parviendra pas à start si ce patch n'existe pas sur la machine cible. Les correctifs ne devraient pas introduire d'API dont vous devez mettre à jour pour dépendre, il n'est donc pas nécessaire de mettre à jour la référence du package.


2 commentaires

Donc, si j'ai SDK 2.2.401 et runtime 2.2.6 alors je devrais être en mesure de mettre à jour AspNetCore.App de 2.2.0 à ? Parce que je ne peux pas - il dit bloqué. C'est la première action que j'essaie de faire dans une nouvelle application Web.


Il est bloqué car vous n'avez pas besoin de mettre à jour :). Au moment de l'exécution, vous exécuterez la version 2.2.6. Les correctifs n'introduisent pas de nouvelles API ou fonctionnalités, il n'y a donc rien à changer dans votre code. Vous devez écrire votre code ciblant la version 2.2.0 et le laisser s'exécuter sur le dernier runtime. NuGet empêche la mise à jour car il n'est pas nécessaire de mettre à jour.



0
votes

J'ai eu un problème similaire avec la 2.2.8, l'installation de la version x86 du SDK l'a simplifié. Les tests unitaires semblent-ils être des processus 32 bits?


0 commentaires